文章标题
2017-10-24 17:36
169 查看
对于多媒体的application经常有需要禁止其他多媒体声音的需求。
在网上搜索了相关的方法:
Java代码
Intent i = new Intent(“com.android.music.musicservicecommand”);
i.putExtra(”command”, “pause”);
sendBroadcast(i);
后来发现这个方法只能解决部分问题,对于那些不支持这个Intent的APP及收音机等是不起作用的。
有一个根本性解决问题的方法,就是获取声音播放的硬件的焦点(个人理解),从而使其它APP停止播放。因为要发出声音肯定要硬件支持的。这里关键是使用AudioManager类。具体代码如下:
Java代码
AudioManager mAudioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
if (mAudioManager != null) {
try {
mAudioManager.requestAudioFocus(null,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
} catch (Exception ex) {
}
}
注意看requestAudioFocus函数第三个参数的使用,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT表示临时获取音乐播放硬件焦点。
具体参考:官方文档https://developer.android.google.cn/reference/android/media/AudioManager.html
在网上搜索了相关的方法:
Java代码
Intent i = new Intent(“com.android.music.musicservicecommand”);
i.putExtra(”command”, “pause”);
sendBroadcast(i);
Intent i = new Intent("com.android.music.musicservicecommand"); i.putExtra("command", "pause"); sendBroadcast(i);
后来发现这个方法只能解决部分问题,对于那些不支持这个Intent的APP及收音机等是不起作用的。
有一个根本性解决问题的方法,就是获取声音播放的硬件的焦点(个人理解),从而使其它APP停止播放。因为要发出声音肯定要硬件支持的。这里关键是使用AudioManager类。具体代码如下:
Java代码
AudioManager mAudioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
if (mAudioManager != null) {
try {
mAudioManager.requestAudioFocus(null,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
} catch (Exception ex) {
}
}
AudioManager mAudioManager = (AudioManager) context .getSystemService(Context.AUDIO_SERVICE); if (mAudioManager != null) { try { mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); } catch (Exception ex) { } }
注意看requestAudioFocus函数第三个参数的使用,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT表示临时获取音乐播放硬件焦点。
具体参考:官方文档https://developer.android.google.cn/reference/android/media/AudioManager.html