Я создавал приложение MediaPlayer, я пытался заставить свое приложение Mediaplayer обрабатывать события AudioFocusChange. Однако, как бы я ни структурировал свой код, я не буду слушать события AudioFocusChange и продолжу проигрывать поверх других приложений. Все работает, за исключением того, что когда я нажимаю кнопку воспроизведения в моем приложении, он просто воспроизводит музыку поверх другого музыкального приложения, не останавливая ее. Я пытался
public void play() {
Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
MainActivity.this.sendBroadcast(i);
int requestAudioFocus = AM.requestAudioFocus(afChangeListener, AudioManager.AUDIOFOCUS_GAIN, AudioManager.STREAM_MUSIC);
if (requestAudioFocus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Toast.makeText(this, "Focus Granted", Toast.LENGTH_SHORT).show();
if (!mediaPlayer.isPlaying() || mediaPlayer == null) {
mediaPlayer.start();
handler.removeCallbacks(moveSeekBarThread);
handler.postDelayed(moveSeekBarThread, 300);
}
} else {
Toast.makeText(this, "Focus Not Granted", Toast.LENGTH_LONG).show();
return;
}
}
в начале моего метода play (), однако он по-прежнему воспроизводит музыку других приложений поверх этого.
Пока у меня есть:
public class MainActivity extends AppCompatActivity implements
AudioManager.OnAudioFocusChangeListener {
...
}
Вслед за блоком слушателя:
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
Toast.makeText(this, "FOCUS LOSS TRANSIENT", Toast.LENGTH_SHORT).show();
pause();
break;
case AudioManager.AUDIOFOCUS_LOSS:
pause();
Toast.makeText(this, "FOCUS LOST", Toast.LENGTH_SHORT).show();
break;
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
MainActivity.this.sendBroadcast(i);
AM.setStreamVolume(AudioManager.STREAM_MUSIC, AM.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
play();
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
stop();
break;
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
Intent iARG = new Intent("com.android.music.musicservicecommand");
iARG.putExtra("command", "pause");
MainActivity.this.sendBroadcast(iARG);
AM.setStreamVolume(AudioManager.STREAM_MUSIC, AM.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
play();
break;
}
}
Я также попробовал реализацию вне объявления класса и обозначил
AudioManager.OnAudioFocusChangeListener = new onAudioFocusChangeListener(){
public void onAudioFocusChange(int focusChange){
...
}
как глобальная функция, которая также не слушала focusChange
Для каждого переключателя были добавлены тосты, чтобы уведомлять меня об изменении состояния фокуса, но я никогда не вижу от них никаких уведомлений. Я также попытался ввести метод:
int requestAudioFocus = AM.requestAudioFocus(null, AudioManager.AUDIOFOCUS_GAIN, AudioManager.STREAM_MUSIC);
if (requestAudioFocus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
MainActivity.this.sendBroadcast(i);
}
Однако, воспроизведение музыки в другом приложении только один раз останавливается. У меня такое чувство, что я упустил что-то простое, я просто не могу заставить его работать.