2016-09-07 4 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を追加するために考慮することが重要です音が鳴った。

関連する問題