Как отключить медиа-сервис при входящем звонке? Мой AudioManager не работает

Я пытаюсь настроить приложение для воспроизведения звука, чтобы остановить воспроизведение в случае прерывания. Я следовал указаниям в примечаниях разработчика Android SDK о настройке AudioFocusHelper следующим образом:

public class AudioFocusHelper  implements AudioManager.OnAudioFocusChangeListener {
    AudioManager mAudioManager;  
    Media_Service mService;
    Context mContext;
    public AudioFocusHelper(Context ctx, Media_Service svc) {  
        mAudioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);        
        mService = svc;    
        }    

    public boolean requestFocus() {        
        return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==            
                mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,            
                        AudioManager.AUDIOFOCUS_GAIN);    
        }    

    public boolean abandonFocus() {        
        return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==            
                mAudioManager.abandonAudioFocus(this);    
        }    

    @Override    
    public void onAudioFocusChange(int focusChange) {        
        // let your service know about the focus change    
        mService.AudioFocus(focusChange);
    }
}

и у меня мой аудиоплеер работает в сервисе, как они предлагают. У меня есть этот метод в моей аудиослужбе, чтобы реагировать на изменения Audio Focus, чтобы приостановить воспроизведение, но он не работает - я не знаю, как проверить это в отладчике vm, поэтому я не могу действительно видеть, что происходит во входящем вызов. Похоже, что он не вызывается, так как я сказал ему всплывающие тосты:

public void AudioFocus(int focusChange) {
    switch (focusChange) {        
    case AudioManager.AUDIOFOCUS_GAIN:            // resume playback           
        if (mMediaPlayer == null) 
            initMediaPlayer();            
        else if (!mMediaPlayer.isPlaying()) 
            mMediaPlayer.start();            
        //mMediaPlayer.setVolume(1.0f, 1.0f);            
        break;        
    case AudioManager.AUDIOFOCUS_LOSS:            // Lost focus for an unbounded amount of time: stop playback and release media player            
        if (mMediaPlayer.isPlaying()) {
            Toast.makeText(this,
                    "Playback interrupted by focus loss", Toast.LENGTH_SHORT).show();

            mMediaPlayer.stop();     
        }
        mMediaPlayer.release();            
        mMediaPlayer = null;            
        break;        
    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:            // Lost focus for a short time, but we have to stop           
        // playback. We don't release the media player because playback            
        // is likely to resume            
        if (mMediaPlayer.isPlaying()) {
            Toast.makeText(this,
                    "Playback paused by focus loss (transient)", Toast.LENGTH_SHORT).show();
            mMediaPlayer.pause();      
        }
        break;        
    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:            // Lost focus for a short time, but it's ok to keep playing            
        // at an attenuated level            
        if (mMediaPlayer.isPlaying())  {
            Toast.makeText(this,
                    "Playback paused by focus loss (duck)", Toast.LENGTH_SHORT).show();
            mMediaPlayer.pause();            
            //mMediaPlayer.setVolume(0.1f, 0.1f); 
        }
        break;    
    }   
}

Я могу опубликовать больше кода, если необходимо, похоже, что я уже публикую много кода, и я не хочу публиковать чрезмерное количество. Мне кажется, что мой onAudioFocusChange просто не звонят.Я использую это на Android 2.2 (minSDK 8), поскольку эта функция не поддерживается до версии 2.2. Я искал советы и находил очень мало по этой теме, так что надеюсь, что кто-нибудь может дать мне какие-то подсказки.

5
задан Peter Ajtai 7 May 2013 в 22:06
поделиться