【发布时间】:2013-06-24 16:30:06
【问题描述】:
我在使用某些 Android 代码时遇到问题,无法在某些事件上播放声音通知。
代码如下:
int result = audioManager.requestAudioFocus(MainRunningService.afChangeListener,AudioManager.STREAM_NOTIFICATION,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mp = new MediaPlayer();
mp.setDataSource(context, soundToPlay);
mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
mp.prepare();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mediaPlayer) {
try {
Log.d(LOGTAG, "SoundService MUSIC: MUSIC IS NOW COMPLETE");
mp.release();
mp = null;
Log.d(LOGTAG, "SoundService MUSIC: MUSIC IS NOW COMPLETE - RELEASED");
} catch (Exception e) {
e.printStackTrace();
}
}
});
mp.setLooping(false);
mp.start();
}
else{
Log.w(LOGTAG, "SoundService Audiofocus was not granted");
}
我发现有时它会播放,而有时它不会播放。当它不播放时,它会命中“未授予 SoundSerice Audiofocus”日志行。我查看了系统日志,但找不到任何说明为什么它没有被授予的信息。
一旦发生这种情况,那么每个请求似乎都会失败。
有没有人指出我可能做错了什么?
【问题讨论】:
-
尝试不同的流类型来测试或向您的清单添加 MODIFY_AUDIO_SETTINGS 权限。似乎在这里有所帮助:stackoverflow.com/a/3539494/833647
-
另一个应用程序可能只是没有放开焦点。但我注意到没有人要求放弃音频焦点。那可能是个问题。调用是放弃AudioFocus,把它放在你的完成监听器中。
-
您是否正在寻找一些播放音频文件 (MediaPlayer) 编码的代码?
-
@gabe 放弃AudioFocus 在释放媒体播放器时被调用。这是我没有包含在应用程序的另一种方法中 - 它运行:audioManager.abandonAudioFocus(MainRunningService.afChangeListener);
-
@TharakaNirmana 一些示例代码可能很方便
标签: android android-mediaplayer