2016-08-09 6 views
0

Ich habe einen typischen onAudioFocusChange Code in meinem Spiel.AUDIOFOCUS_GAIN wird nach AUDIOFOCUS_LOSS_TRANSIENT nach einem Telefonanruf nicht gerufen

@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"); 
    } 

Das Problem ist, dass, wenn ein schwebendes Fenster erscheint auf Samsung Telefone die Anwendung AUDIOFOCUS_LOSS_TRANSIENT Nachricht empfängt, aber wenn dieses Fenster geschlossen ist, kommt keine Meldung an die Anwendung.

enter image description here

Hier werden relevante Protokollzeilen:

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 

Irgendwelche Ideen, wie Schließen des Fensters zu fangen?

Antwort

0

Der Schlüsselsatz war here.
Hinweis: Das System gewährt keinen Audiofokus (AUDIOFOCUS_REQUEST_FAILED), wenn gerade ein Telefonanruf läuft und die Anwendung AUDIOFOCUS_GAIN nicht empfängt, nachdem der Anruf beendet wurde.

Also, das ist ein erwartetes Verhalten, und ich beschloss, einen Timer zu erstellen und Audio-Fokus nur anzufordern, wenn es endet.

Mein aktueller Code ist:

@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(); 
} 
Verwandte Themen