播放、停止、暂停、快进,快退和媒体录放控制
Android为播放音乐、警报、通知、电话铃声、系统声音、通话音量、双音多频音维护了单独的音频流。首先允许用户控制每个单独流的音量
大部分时候使用STREAM_MUSIC流来播放音频
默认情况下,按音量控制键会改变实际的音频流的音量。如果您的应用当前没有播放任何东西、按音量键会调整电话音量
Android 提供了便利的setVolumeControlStream()方法让音量按键直接处理你指定的音频流。
在应用生命周期中应该尽早调用--因为您只需要在activity生命周期中调用一次,最典型的是onCreate()方法中调用(在Activity或控制媒体的Fragment).这保证了不管应用是否可见,音量控制功能仍然像用户期待的。
setVolumeControlStream(AudioManager.STREAM_MUSIC);
在许多手机,有线和无线耳机上都有媒体播放按键,如播放、暂停、停止、快进和快退.当用户操作这些键时,系统会广播一个含有ACTION_MEDIA_BUTTON动作的intent
<receiver android:name=".RemoteControlReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
在receiver实现里面,需要获的触发广播的按键。Intent在EXTRA_KEY_EVENT里面包含了按键,KeyEvent类包含了一个KEYCODE_MEDIA_*静态常量列表,每项代表了各种媒体按键,如KEYCODE_MEDIA_PLAY_PAUSE(暂停)和KEYCODE_MEDIA_NEXT(下一个)
public class RemoteControlReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {
// Handle key press.
}
}
}
}
接下来的代码能够在应用注册或者取消注册接收媒体按键事件时候使用。如果注册了,你的广播接收器是一个高级的接收器能够接收到所有的媒体按键广播
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
...
// Stop listening for button presses
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
应用应该取消注册大多数的接收器,当他们变得不活跃或者不可见(像是在onStop()回调期间).但是,媒体按键应用不是那么简单-实际上,对应媒体按键处理是很重要的,如果你的应用不可见,视图最好不能进行控制。
一个更好地方法是当应用程序得到和失去音频焦点的时候,注册和取消注册媒体按钮事件接收器。