2016-09-07 3 views
0

경고 앱을 작성 중입니다. 알림을 받으면 음악과 같은 모든 현재 소리를 멈추고 알림 음을 울리고 싶습니다. 사용자가 작업을 완료하고 활동이 닫히면 이전 소리가 계속됩니다.Android 정지 소리

누군가 전화하는 것과 같습니다. 이 동작을 어떻게 수행 할 수 있습니까?

답변

1

audio focus을 요청할 수 있습니다. 자신의 오디오로 끝내면 오디오 포커스를 포기하여 다른 앱에서 사운드를 다시 재생할 수 있습니다. 오디오 포커스를 요청하는 다른 앱에 대해서도 통보되므로 자신의 사운드를 일시 중지하고 다시 시작할 수 있습니다.

private void playSound(){ 
try{ 
      Log.d(TAG, "request audio focus"); 
      this.am=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
      int result=this.am.requestAudioFocus(afListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE); 
      if(result==AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ 
       Log.d(TAG, "audio focus granted"); 
       this.player=new MediaPlayer(); 
       this.player.setOnPreparedListener(new OnPreparedListener(){ 

        @Override 
        public void onPrepared(MediaPlayer mp) { 
         mp.start();     
        }}); 
       this.player.setOnCompletionListener(new OnCompletionListener(){ 

        @Override 
        public void onCompletion(MediaPlayer mp) { 
         am.abandonAudioFocus(afListener); 
        }}); 
       this.player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
       this.player.setDataSource(getApplicationContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.sound)); 
       this.player.prepareAsync(); 
      } 
     }catch(Exception e){ 
      Log.e(TAG, "error playing music." + e.getMessage(), e); 
     } 
} 

청취자 :

가 경고음을 시작 : 나는 다음과 같은 코드를 사용 줄리어스 Skripkauskas '대답의 도움으로

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 

// Request audio focus for playback 
int result = am.requestAudioFocus(afChangeListener, 
           // Use the music stream. 
           AudioManager.STREAM_MUSIC, 
           // Request permanent focus. 
           AudioManager.AUDIOFOCUS_GAIN); 

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
    am.registerMediaButtonEventReceiver(RemoteControlReceiver); 
    // Start playback. 
} 
+0

'AudioManager'는 올바른 힌트입니다. 하지만 내 경우에는'AUDIOFOCUS_TRANSIENT_EXCLUSIVE'을 사용하여 소리가 나고 나머지는 다른 모든 앱이 계속 재생할 수 있도록 오디오 포커스를 릴리스합니다. –

0

:

오디오 사용 요청 일단 초점이 부여되면 소리 만들을 것이기 때문에 나는 단순히 소리를 멈추게됩니다. 소리가 다른 응용 프로그램에 의해 중단 얻을 것이다 경우

private AudioManager.OnAudioFocusChangeListener afListener = new AudioManager.OnAudioFocusChangeListener(){ 

@Override 
public void onAudioFocusChange(int focusChange) { 
    Log.d(TAG, "audio focus changed" + Integer.toString(focusChange)); 
    if(player==null){ 
     // we don't play audio 
     return; 
    }   
    player.stop(); 
}}; 

어디 직후 오디오 사용을 해제 am.abandonAudioFocus(afListener) 전화를 플레이어에 OnCompletionListener을 추가 고려하는 것이 중요합니다 ... 중요하지 않습니다 소리가 들렸다.