경고 앱을 작성 중입니다. 알림을 받으면 음악과 같은 모든 현재 소리를 멈추고 알림 음을 울리고 싶습니다. 사용자가 작업을 완료하고 활동이 닫히면 이전 소리가 계속됩니다.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'을 사용하여 소리가 나고 나머지는 다른 모든 앱이 계속 재생할 수 있도록 오디오 포커스를 릴리스합니다. –