Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.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 - Fatal编程技术网

Android 在安卓系统中,暂停通话中的音乐播放器,然后在通话后再次恢复播放

Android 在安卓系统中,暂停通话中的音乐播放器,然后在通话后再次恢复播放,android,Android,我正在使用android.media.MediaPlayer对象在我的应用程序中播放音频文件。一切正常,但当播放歌曲时接到电话时,应用程序不会暂停媒体播放器,您可以在通话中听到歌曲。请告诉我如何在通话中暂停media player,并在通话结束后再次恢复。当您的活动(或服务)被通话中断时,请放置MediaPlayer#pause()进入活动#onPause和继续播放的代码进入活动#onResume我认为问题可能在于MediaPlayer是在自己的线程中执行的,当您的活动暂停时,并不意味着Medi

我正在使用android.media.MediaPlayer对象在我的应用程序中播放音频文件。一切正常,但当播放歌曲时接到电话时,应用程序不会暂停媒体播放器,您可以在通话中听到歌曲。请告诉我如何在通话中暂停media player,并在通话结束后再次恢复。

当您的活动(或服务)被通话中断时,请放置
MediaPlayer#pause()
进入
活动#onPause
和继续播放的代码进入
活动#onResume
我认为问题可能在于MediaPlayer是在自己的线程中执行的,当您的活动暂停时,并不意味着MediaPlayer也会自动暂停

使用
PhoneStateListener
来确定电话正在使用中。

我也有类似的问题。我的HTC Desire HD会在接到电话时停止播放音乐,但挂断后不会继续播放。我发现这是由Viber应用程序引起的,当我删除“Viber”时,一切都恢复正常。现在,当我接到电话时,音乐会在我结束通话后暂停并继续播放。

在您的应用程序中引入a,如下所示:

private PhoneStateListener mPhoneListener = new PhoneStateListener() {
    public void onCallStateChanged(int state, String incomingNumber) {
        try {
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    pauseStream();
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    resumeStream();
                    break;
                default:
            }
        } catch (Exception e) {
            Log.e(TAG, e.getMessage());
        }
    }
};
然后,您需要在onCreate()中或在服务的onStartCommand()方法中设置它:

        radioStream.setAudioStreamType(AudioManager.STREAM_MUSIC);
        radioStream.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer stream) {
                telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
                telephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
                isMusicPlaying = true;
                isServiceRunning = true;
                stream.start();
            }
        });
        try {
            radioStream.prepare();
        } catch (IllegalStateException e1) {
            e1.printStackTrace();
            streamErrorHandler();
        } catch (IOException e1) {
            e1.printStackTrace();
            streamErrorHandler();
        }
您可以实现以下方法的版本:

public static void pauseStream() {
    if (isServiceRunning) {
        if (radioStream.isPlaying()) {
            isMusicPlaying = false;
            radioStream.pause();
        }
    } else {
        Log.i(TAG, "service isn't running");
    }
}

public static void resumeStream() {
    if (isServiceRunning) {
        if (!radioStream.isPlaying()) {
            isMusicPlaying = true;
            radioStream.start();
        }
    } else {
        Log.i(TAG, "service isn't running");
    }
}

radioStream是您的静态对象。我在服务中使用此选项,因此您可以退出iServiceRunning,但这对任何人都适用。

以下是永久解决方案。使用audiomanager获取音频焦点。当呼叫到来时,它会呼叫AUDIOFOCUS\u LOSS\u TRANSIENT,您可以使用该方法暂停媒体播放器。调用之后,它调用AUDIOFOCUS\u增益方法,所以只需调用mediaplayer.start方法

private AudioManager.OnAudioFocusChangeListener  afChangeListener = new AudioManager.OnAudioFocusChangeListener() {

            @Override
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            mMediaPlayer.start();}

else if(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){

                mMediaPlayer.pause();
 }

问题是,如果用户更改应用程序中的活动,它也会暂停音乐。我同意下面的标记-在这一点上,您可以使用PhoneStateListener来检测暂停是否是由于电话使用造成的我是否需要在AndroidManifest.xml中包含一些权限或与电话相关的标记来使用此代码?@MMazzon I设置以下安全权限:android.permission.FOREGROUND\u SERVICE、android.permission.MODIFY\u AUDIO\u SETTINGS、android.permission.READ\u PHONE\u STATE,如果您将其用于在线流,则还需要添加:android:usesCleartextTraffic=“true”随你的便