2012-09-08 2 views
10

전화가 울릴 때 미디어 플레이어를 일시 중지하려고합니다. 안드로이드 사이트의 샘플 코드를 사용합니다. 그것은 이것과 같습니다. 전화 링 AUDIOFOCUS_LOSS_TRANSIENT 보낼android에서 전화를 건 후에 AUDIOFOCUS_LOSS이 (가)

public void onAudioFocusChange(int focusChange) { 
     switch (focusChange) { 
     case AudioManager.AUDIOFOCUS_GAIN: 
      // resume playback 
      if (mMediaPlayer != null && !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 
      stopMediaPlayer(); 
      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()) 
       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()) 
       mMediaPlayer.setVolume(0.1f, 0.1f); 
      break; 
     } 
    } 

; 괜찮습니다. 통화가 끝나면 AUDIOFOCUS_GAIN이 전송되고 플레이어는 계속 재생됩니다. 그것은 또한 OK입니다. 하지만 AUDIOFOCUS_GAIN을 보낸 직후에는 AUDIOFOCUS_LOSS가 전송됩니다. 오디오 포커스를 잃어 버리는 이유가 무엇입니까? 미리 Thx.

+0

가끔씩 같은 것을 보았 기 때문에이 질문에 현상금을 추가했습니다. 또는 AUDIOFOCUS_GAIN => AUDIOFOCUS_LOSS => AUDIOFOCUS_GAIN => AUDIOFOCUS_LOSS => AUDIOFOCUS_GAIN => AUDIOFOCUS_LOSS => ... 등등을 반복하십시오. – StackOverflowed

+0

어떤 장치를 사용합니까 (에뮬레이터로 테스트)? Google 음악 있나요? 다른 뮤직 플레이어 (예 : Google 뮤직)와 호환되는지 확인할 수 있나요? logcat을 추가하십시오. 거기에 흥미로운 것들이있을 수 있습니다. 포커스를 종료하고 "훔치는"통화를 수신하는 다른 (오래된) 뮤직 앱이있을 수 있습니까? –

+0

나는 또한 같은 문제가있다 : 나의 장치는 갤럭시 노트 N7000 - 안드로이드 4.0.3이다. 또 하나 더 : AUDIOFOCUS_LOSS가 실행 된 후, 청취자는 결코 다시 호출되지 않습니다! – hungson175

답변

3

확인할 사항 : 1) 예를 들어 클릭 버튼을 클릭하면 초점을 요청하고 재생을 시작하는 재생 버튼이 있습니까? 한 번 클릭의 피드백을 제공하기 위해 "틱"소리를내는 것이 문제였습니다. 그런 일이 발생했을 때 그들은 내 앱에서 오디오 포커스를 빼앗을 것이다. 당신의 XML에서 그 활동의 모든 버튼에이 값을 false로 설정합니다

android:soundEffectsEnabled = 'false' 

2) 또한 포커스를 요구해 다른 미디어 플레이어 응용 프로그램의 설치를 확인합니다. 그들은 그것을 잃은 직후 초점을 요청하고 있습니까? 그렇다면이 앱을 설치하지 말 것을 사용자에게 경고하는 것 이외에는 할 수있는 일이 많지 않습니다.

3

아마 누군가에게 도움이 될 것입니다. 프로젝트에서 MediaPlayer를 직접 사용하지 않고 VideoView를 통해이 문제가 발생했습니다. 파일을

AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); 
am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

를 여는 동안 그것은 당신이 파일을 열 그래서이 focusChange AudioManager.AUDIOFOCUS_LOSS으로 발사되기 전에 설정 오디오 초점과 리스너를 얻는 코드를 다음있다.

관련 문제