Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android媒体播放器:处理来电并在后台播放音频_Android_Multithreading_Media Player - Fatal编程技术网

android媒体播放器:处理来电并在后台播放音频

android媒体播放器:处理来电并在后台播放音频,android,multithreading,media-player,Android,Multithreading,Media Player,我对安卓应用程序开发相当陌生,我需要一些指导。 我编写了一个应用程序,通过Android MediaPlayer一次播放一个mp3文件或播放列表播放互联网上的mp3文件 用户可以一次播放一个mp3,也可以排队播放几个mp3,进入播放列表屏幕,逐个播放。 我在屏幕上有一个进度条、开始、停止、暂停和继续按钮,可以播放单个mp3。 播放列表屏幕上没有进度条,但有开始、停止、暂停和继续按钮 我想要以下行为,但不确定如何正确实施: 当mp3正在播放且接到来电时,mp3暂停;当用户挂断时,mp3会自动恢复

我对安卓应用程序开发相当陌生,我需要一些指导。 我编写了一个应用程序,通过Android MediaPlayer一次播放一个mp3文件或播放列表播放互联网上的mp3文件

用户可以一次播放一个mp3,也可以排队播放几个mp3,进入播放列表屏幕,逐个播放。 我在屏幕上有一个进度条、开始、停止、暂停和继续按钮,可以播放单个mp3。 播放列表屏幕上没有进度条,但有开始、停止、暂停和继续按钮

我想要以下行为,但不确定如何正确实施:

  • 当mp3正在播放且接到来电时,mp3暂停;当用户挂断时,mp3会自动恢复

  • 当mp3播放时,用户按下手机的“主页”按钮,mp3继续播放,而用户可以自由做其他事情(例如查看电子邮件)

我是否需要将媒体播放器作为服务来实现? 我是否需要一个单独的线程来运行媒体播放器

我现在两样都不做

这方面有好的教程吗

我已经在一个单独的应用程序中尝试了下面的教程,该应用程序将媒体播放器作为一项服务来实现,它似乎可以实现我想要的大部分功能,但我还没有弄清楚如何合并“暂停”和“继续”按钮。 “服务Demo-使用Android服务”:

作为后续问题,是否有可以购买或免费下载的罐装媒体播放器已经具备此功能,可以包含在我的应用程序中

我还没有在这里发布任何代码,因为这是一个更一般的问题,但将作为后续问题发布

提前感谢,,
Dave

是的,您需要媒体播放器的服务,以及如何处理电话请阅读有关音频焦点的内容。

尝试此代码在通话之间停止并恢复歌曲

PhoneStateListener phoneStateListener=new PhoneStateListener()
      {
        @Override
        public void onCallStateChanged(int state, String phoneNumber) 
        {
            if(state==TelephonyManager.CALL_STATE_RINGING )
            {
                MP.Pause();
            }
           else if(state==TelephonyManager.CALL_STATE_OFFHOOK )
           {
           MP.Pause();

         }else if (state==TelephonyManager.CALL_STATE_IDLE)
            {
                MP.Start();
            }

        }

    };
    TelephonyManager manger = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
    if(manger!= null) {
        manger.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
    }