私は警告アプリを書いています。アラートが受信されると、現在のすべてのサウンド(音楽など)を停止し、アラート音を鳴らしたい。ユーザーが何かをした後、活動が閉じられると、前の音が継続するはずです。Androidの停止音
誰かがあなたに電話するのと同じことです。どのようにこの動作を達成できますか?
私は警告アプリを書いています。アラートが受信されると、現在のすべてのサウンド(音楽など)を停止し、アラート音を鳴らしたい。ユーザーが何かをした後、活動が閉じられると、前の音が継続するはずです。Androidの停止音
誰かがあなたに電話するのと同じことです。どのようにこの動作を達成できますか?
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.
}
:
オーディオフォーカスを要求一度フォーカスが与えられると音を鳴らすだけなので、音を止めるだけです。音は他のアプリによって中断されます場合は、それは...
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
を追加するために考慮することが重要です音が鳴った。
「AudioManager」は正しいヒントでした。私の場合、私は 'AUDIOFOCUS_TRANSIENT_EXCLUSIVE'を使用してサウンドが出るかもしれません。その後、私はオーディオフォーカスをリリースして、他のすべてのアプリが引き続きプレイできるようにします –