2016-08-09 17 views
0

私のゲームには普通のonAudioFocusChangeというコードがあります。電話の後にAUDIOFOCUS_LOSS_TRANSIENTの後にAUDIOFOCUS_GAINが呼び出されない

@Override 
public void onAudioFocusChange(int focusChange) { 
    switch (focusChange) { 
     case AudioManager.AUDIOFOCUS_GAIN: 
      Log.i(TAG,"AUDIOFOCUS_GAIN"); 
      mHasAudioFocus = requestAudioFocus(); 
      break; 
     case AudioManager.AUDIOFOCUS_LOSS: 
      Log.i(TAG,"AUDIOFOCUS_LOSS"); 
      abandonAudioFocus(); 
      break; 
     case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: 
      Log.i(TAG,"AUDIOFOCUS_LOSS_TRANSIENT"); 
      abandonAudioFocus(); 
      break; 
     case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: 
      Log.i(TAG,"AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK"); 
      abandonAudioFocus(); 
      break; 
     default: 
      Log.i(TAG,"Unrecognized audiofocus change"); 
    } 

問題は、フローティングウィンドウがサムスンの携帯電話に表示されたときにアプリケーションがAUDIOFOCUS_LOSS_TRANSIENTメッセージを受信したこと、であるが、このウィンドウが閉じられたときに、何のメッセージは、アプリケーションに来ることはありません。ここで

enter image description here

関連するログの行です:このウィンドウの閉鎖をキャッチする方法

13:20:53.253 770 7745 I MediaFocusControl: AudioFocus requestAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls 
13:20:53.253 14499 14499 I com.js.helpers.JSNativeActivity: AUDIOFOCUS_LOSS_TRANSIENT 
13:20:53.253 14499 14499 I com.js.helpers.JSNativeActivity: abandonAudioFocus() 
13:20:53.253 14499 14499 I JSNativeActivity: onAbandonAudioFocus 
13:20:53.253 770 1508 I MediaFocusControl: AudioFocus abandonAudioFocus() from android.media.AudioManager$42599770com.js.helpers.JSNativeActivity$4252c788 
13:20:53.253 770 1508 I MediaFocusControl: AudioFocus removeFocusStackEntry(): removing entry for android.media.AudioManager$42599770com.js.helpers.JSNativeActivity$4252c788 
13:21:01.383 770 1220 I MediaFocusControl: AudioFocus abandonAudioFocus() from AudioFocus_For_Phone_Ring_And_Calls 

任意のアイデア?

答えて

0

キーセンテンスはhereでした。
注:現在処理中の電話がある場合、音声のフォーカス(AUDIOFOCUS_REQUEST_FAILED)は付与されず、コールが終了してもアプリケーションはAUDIOFOCUS_GAINを受信しません。

これは予想される動作です。タイマーを作成し、終了時にオーディオフォーカスを要求することにしました。

私の現在のコードは次のとおりです。

@Override 
public void onAudioFocusChange(int focusChange) { 
    switch (focusChange) { 
     case AudioManager.AUDIOFOCUS_GAIN: 
      Log.d(TAG, "AUDIOFOCUS_GAIN"); 
      mHasAudioFocus = requestAudioFocus(); 
      break; 
     case AudioManager.AUDIOFOCUS_LOSS: 
      Log.d(TAG, "AUDIOFOCUS_LOSS"); 
      abandonAudioFocus(); 
      break; 
     case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: 
      Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT"); 
      abandonAudioFocus(); 
      startAudioFocusCountdownTimer(); 
      break; 
     case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: 
      Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK"); 
      abandonAudioFocus(); 
      startAudioFocusCountdownTimer(); 
      break; 
     default: 
      Log.d(TAG, "Unrecognized audiofocus change"); 
    } 
} 

private void startAudioFocusCountdownTimer() { 
    new CountDownTimer(2000, 2000) { 
     public void onTick(long millisUntilFinished) { 
      // do nothing 
     } 
     public void onFinish() { 
      mHasAudioFocus = requestAudioFocus(); 
      if (!mHasAudioFocus) 
       startAudioFocusCountdownTimer(); 
     } 
    }.start(); 
} 
関連する問題