Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.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 如何防止MediaPlayer在其他应用中启动_Android_Audio_Focus_Android Audiomanager - Fatal编程技术网

Android 如何防止MediaPlayer在其他应用中启动

Android 如何防止MediaPlayer在其他应用中启动,android,audio,focus,android-audiomanager,Android,Audio,Focus,Android Audiomanager,我尝试制作简单的mediaplayer应用程序,只是为了个人/教育目的(播放特定的mp3文件),但其他应用程序存在问题。我使用服务在后台播放声音。一切正常,但当我打开另一个媒体应用程序时,我仍然可以同时播放不同的歌曲。如何“告诉”系统我的应用程序正在使用mediaplayer,在我的服务结束之前,任何人都不能使用mediaplayer。我使用AudioManager STREAM_MUSIC,并在AUDIOFOCUS_请求_批准检查AUDIOFOCUS_增益后开始播放我的歌曲 播放我的音乐并设置

我尝试制作简单的mediaplayer应用程序,只是为了个人/教育目的(播放特定的mp3文件),但其他应用程序存在问题。我使用服务在后台播放声音。一切正常,但当我打开另一个媒体应用程序时,我仍然可以同时播放不同的歌曲。如何“告诉”系统我的应用程序正在使用mediaplayer,在我的服务结束之前,任何人都不能使用mediaplayer。我使用AudioManager STREAM_MUSIC,并在AUDIOFOCUS_请求_批准检查AUDIOFOCUS_增益后开始播放我的歌曲

播放我的音乐并设置我使用的前台通知

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN);

    if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == result) {

        this.startForeground();
        player.start();
    } 

您必须使用媒体播放器音频聚焦实现,详细文档如下:

音频焦点是分配给任何请求音频焦点的应用程序的东西之一,这意味着如果您请求音频焦点,任何其他使用它的应用程序都将自动停止&you;我将开始使用音频,与您使用音频时的情况相同。如果任何其他应用程序请求音频,您的音频将被停止。请求音频焦点时,您注册的音频焦点更改侦听器的onAudioFocusChange处理程序将通知您音频焦点丢失

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

// Request audio focus for playback
int result = am.requestAudioFocus(focusChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);


if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// other app had stopped playing song now , so u can do u stuff now .
}


谢谢你的回复,但我正在寻找防止其他应用程序在我的应用程序运行时获得audiofocus的方法。当我的应用程序打开时,我希望始终保持音频聚焦增益,直到我将关闭我的应用程序(如果另一个应用程序开始使用媒体,请不要获取音频聚焦,也不要更改我的音频聚焦)好吧,我对此一无所知。据我所知,AudioFocus不能由一个具有高优先级的应用程序持有。由于通知也使用AudioFocus,根据您的要求,您希望包括呼叫或通知在内的其他应用程序都不能使用AudioFocus。即使我想知道这个问题的解决方案,如果有的话。如果你找到任何解决办法,请告诉我。
private OnAudioFocusChangeListener focusChangeListener =
          new OnAudioFocusChangeListener() {
                  public void onAudioFocusChange(int focusChange) {
                             AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
                    switch (focusChange) {

                           case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) :
                           // Lower the volume while ducking.
                           mediaPlayer.setVolume(0.2f, 0.2f);
                           break;
                           case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
                           pause();
                           break;

                           case (AudioManager.AUDIOFOCUS_LOSS) :
                           stop();
                           ComponentName component =new ComponentName(AudioPlayerActivity.this,MediaControlReceiver.class);
                           am.unregisterMediaButtonEventReceiver(component);
                           break;

                           case (AudioManager.AUDIOFOCUS_GAIN) :
                           // Return the volume to normal and resume if paused.
                           mediaPlayer.setVolume(1f, 1f);
                           mediaPlayer.start();
                           break;
                           default: break;
}
}
};