2017-11-16 1 views
3

Voip 통화 앱에서 작동합니다. 문제는 네이티브 뮤직 플레이어를 시작하고 노래를 재생하며 통화 음악 플레이어가 포커스를 받음으로써 재생을 재개하지 않으면 내 앱 호출을 열었습니다. 무엇이 문제 일 수 있습니다, 미리 감사드립니다.Android AudioManager abandonAudioFocus 다른 앱을 재생하지 못했습니다.

참고 :

: 다른 응용 프로그램이 다른 응용 프로그램 작업을 재개하는 데 초점을 주려고 사용 후

AudioManager.OnAudioFocusChangeListener mListener 
    = new AudioManager.OnAudioFocusChangeListener() { 
    @Override 
    public void onAudioFocusChange(int i) { 
     MLog.e(TAG, "onAudioFocusChange(" + i + ")"); 
    } 
}; 
am.requestAudioFocus(mListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN); 

: 기본 전화 응용 프로그램은

이 경우에서 잘 AudioFocusChangeListener을하고

AudioManager am = getAudioManager(); 
am.abandonAudioFocus(mListener); 
+0

호출 완료 후 onAudioFocusChange (int i)에 0 또는 1과 같은 변경 사항이 있습니까? –

답변

1

잘 모르겠습니다. 나는 당신의 질문이 옳은지 아닌지를 설명해 주겠다.

Voip 통화 앱을 사용할 때와 사용자가 음악을 재생하고 앱에서 전화를 걸 때 네이티브 플레이어 음악이 일시 중지되어야하고 통화가 완료된 후 다시 재생해야합니다 .

TelephonyManager를 사용하여 전화를 걸고 있습니까? 그런 다음 solution에서 PhoneStateListener를 사용하여 통화 상태의 변경 사항을 수신 대기 할 수 있습니다. 수신자를 TelephonyManager에 등록 할 수 있습니다.

그렇다면 Voip 통화 응용 프로그램에서 전화를 걸 때 AudioManager의 isMusicActive를 확인하십시오. 그것은 사용자 정의 애플 리케이션을 포함하여 활성 음악이 전화로 재생 줄 것입니다.

isMusicActive() 음악이 활성화되어 있는지 확인합니다. 여기

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

if(mAudioManager.isMusicActive()) { 
    Intent i = new Intent(SERVICECMD); 
    i.putExtra(CMDNAME , CMDPAUSE); 
    sendBroadcast(i); 
} 

docs에서 MusicActive는 단순히 그것을 통과하고 당신의 전화를 할 경우. 통화를 끝내고 음악 플레이어를 다시 일시 중지하면 기본 음악 플레이어뿐 아니라 모든 플레이어가 사용할 수 있습니다.

컨트롤이와 안드로이드의 기본 음악 플레이어

,

귀하의 경우에는
public static final String CMDTOGGLEPAUSE = "togglepause"; 
public static final String CMDPLAY = "play"; 
public static final String CMDPAUSE = "pause"; 
public static final String CMDPREVIOUS = "previous"; 
public static final String CMDNEXT = "next"; 
public static final String SERVICECMD = "com.android.music.musicservicecommand"; 
public static final String CMDNAME = "command"; 
public static final String CMDSTOP = "stop"; 

이 앱에서 VoIP 통화를하기 전에, 활성 음악이없이이 좋아입니다 확인 명령입니다

private boolean isSomethingPlaying; 

    AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

if(mAudioManager.isMusicActive()) { 

    // some music is playing, so make it pause and save the flag for further usage. 

    isSomethingPlaying = true; 

    Intent i = new Intent(SERVICECMD); 
    i.putExtra(CMDNAME , CMDPAUSE); 
    sendBroadcast(i); 
} 

통화가 완료된 후 해당 기능에서 u가 플래그로 브로드 캐스트를 사용하여 음악을 일시 중지했는지 확인합니다.

if(isSomethingPlaying) 
{ 
    // before our call some music is playing. so make it play again. 
    isSomethingPlaying = false; 
    Intent i = new Intent(SERVICECMD); 
     i.putExtra(CMDNAME , CMDPLAY); 
     sendBroadcast(i); 
} 
+2

그것은 나를 위해 트릭을했습니다. (mAudioManager.isMusicActive())가 플레이어가 살아 있어도 true가 아닌 경우. 하지만이 같은 방송을 보냈습니다. 정말 감사합니다. 의도 i = 새로운 의도 (SERVICECMD); i.putExtra (CMDNAME, CMDPLAY); sendBroadcast (i); – Guruprasad

+0

환영합니다.도와 드리겠습니다 :) –

+0

(mAudioManager.isMusicActive())가 true 인 경우 어떤 경우에 말씀해 주실 수 있습니까? – Guruprasad

관련 문제