Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 AudioFocusChangeListener无法侦听_Android_Audio_Listener_Multimedia_Android Audiomanager - Fatal编程技术网

Android AudioFocusChangeListener无法侦听

Android AudioFocusChangeListener无法侦听,android,audio,listener,multimedia,android-audiomanager,Android,Audio,Listener,Multimedia,Android Audiomanager,我在使用AudioFocusChangeListener时遇到问题,但仍然无法收听音频焦点的更改。有人能帮我找到原因吗?以下是我的工作: 在我的FM应用程序中,当FM在startFM中启动时,我放置requestAudioFocus()以获取资源: int result = mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_FM,AudioManager.AUDIOFOCUS_GAIN_TRANSIE

我在使用AudioFocusChangeListener时遇到问题,但仍然无法收听音频焦点的更改。有人能帮我找到原因吗?以下是我的工作:

  • 在我的FM应用程序中,当FM在startFM中启动时,我放置
    requestAudioFocus()
    以获取资源:

    int result = mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_FM,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
    if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        Log.d(LOGTAG, "Successfull to request audioFocus listener");
    } else {
        Log.d(LOGTAG, "Failure to request focus listener");
    }
    
  • onDestroy()
    中退出应用程序时,我使用
    放弃AudioFocus()
    来释放资源

  • 成员变量
    mAudioFocusListener
    如下所示:

    private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        switch (focusChange) {
            case AudioManager.AUDIOFOCUS_LOSS:
                Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS, turning FM off");
    
                if (isFmOn()) {
                    fmOff();
                }
                break;
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
    
                if (isFmOn()) {
                    Log.d(LOGTAG, "AudioFocus: FM is on, turning off");
                    mute();
                    stopFM();
                }
                break;
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
    
                if (isFmOn()) {
                    Log.d(LOGTAG, "AudioFocus: FM is on, turning off");
                    mute();
                    stopFM();
                }
                break;
            case AudioManager.AUDIOFOCUS_GAIN:
                Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_GAIN");
    
                if (isFmOn()) {
                    Log.d(LOGTAG, "AudioFocus: FM is off, turning back on");
                    unMute();
                    startFM();
                }
                break;
            default:
                Log.e(LOGTAG, "Unknown audio focus change code " + focusChange);
        }
    }
    };
    
  • 根据日志,它打印“Successfull to request audioFocus listener”,但不打印报警打开或其他音频更改事件时的任何
    AudioForcus
    更改日志。有人能找出它的毛病吗

  • 另一方面,我将日志放在AudioService.java和AudioManger.java中,其中AudioService.java中的requestAudioFocus() 如果(!mFocusStack.empty()&&(mFocusStack.peek().mFocusDispatcher!=null)){

  • 在AudioManager.java中,这里也不执行以下操作: 私有IAudioFocusDispatcher mAudioFocusDispatcher=new IAudioFocusDispatcher.Stub(){

  • 这就是我的全部问题。有人能告诉我为什么这个听众不能收听报警事件和其他音频焦点更改事件吗?顺便问一下,我如何才能成功收听这些事件?可能我错过了某个步骤或使用了错误的方式?非常感谢。

    尝试以下方法:

    private class MyService extends Service implements AudioManager.OnAudioFocusChangeListener {
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_LOSS:
                    Log.e(TAG, "AudioFocus: received AUDIOFOCUS_LOSS, turning FM off");
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    Log.e(TAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    Log.e(TAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
                    break;
                case AudioManager.AUDIOFOCUS_GAIN:
                    Log.v(TAG, "AudioFocus: received AUDIOFOCUS_GAIN");
                    break;
                default:
                    Log.e(TAG, "Unknown audio focus change code " + focusChange);
            }
        }
    
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    
    而且

    mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    
    它适合我。

    DeerCoder

    我相信,如果您请求AudioManager.STREAM_音乐类型的音频焦点,您将只收到影响此特定音频流的事件

    mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    

    警报和通知在单独的音频流上进行管理,如AudioManager.stream\u通知、AudioManager.stream\u警报、AudioManager.stream\u铃声等。

    谢谢,音乐和FM似乎有冲突。我通过修改音乐解决了这一问题。音乐应用程序在中断后已成为焦点。谢谢大家。
    mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
    
    mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);