Как отключить медиа сервис для входящего звонка?Мой AudioManager не работает - PullRequest
5 голосов
/ 24 августа 2011

Я пытаюсь настроить приложение воспроизведения звука, чтобы остановить воспроизведение в случае прерывания. Я следовал указаниям в 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. В поисках подсказок привет и низ и я очень мало нахожу эту тему, так что я надеюсь, что кто-нибудь может подсказать мне.

Ответы [ 2 ]

3 голосов
/ 26 августа 2011

У меня была такая же проблема, помните, что вам нужно вызывать метод requestFocus (), когда вы начинаете воспроизведение, и прекращать работу (), когда вы закончите.

0 голосов
/ 24 августа 2011

Я думаю, что это может помочь с генерацией входящих звонков через DDMS: Fake Incoming Call Android

Надеюсь, вы можете отладить ваше приложение с помощью этого.

...