先说几个概念,第一个是Audio Stream,
Audio Stream可以认为是一个可以单独进行声音控制的通道。music,alarm,notification,电话铃声,系统声音等等都有自己独立的Audio Stream(普通app使用STREAM_MUSIC ),可以分别调整音量的大小,例如你进入一个app可以用音量键调整它的声音大小,如果这个app不会播放声音那调整的就是手机铃声。
但是这么多Audio Stream如果同时播放就会互相干扰,所以引入了第二个概念:Audio Focus,系统只有一个Audio Focus,哪一个audio stream获得了audio focus它就可以播放声音。
知道了这两个概念就可以写程序了:
第一步,声明activity使用某个audio stream
在activity/fragment的onCreate方法中
setVolumeControlStream(AudioManager.STREAM_MUSIC);
这样在这个activity中按音量键就是调整STREAM_MUSIC的音量
第二步,实现broadcast receiver,用来接收按下某个键的广播,并在manifest声明
user按下播放键,暂停键,下一首等等这些key时,系统会发出广播ACTION_MEDIA_BUTTON,在广播中携带key event(通过EXTRA_KEY_EVENT读出)
public class RemoteControlReceiver extends BroadcastReceiver { @Override public void onReceive(Context context,