标签:
Android系统提供一套不同的audio stream提供给播放音乐、闹钟、通知、来电提示、系统声音,通话音量以及双音多频的声调。这套机制为App的使用者通过独立的Stream来控制音量提供了可能性。
多数的stream受限于系统的事件,因此,除非你的App定位于替代系统的闹钟,你在设计时基本上会使用STREAM_MUSIC stream来播放你的audio。
使用硬件按钮来控制你的App的Audio音量
如果你安装了游戏或者是音乐的App,那么当用户按音量按钮的时候他们通常是想要控制游戏或是音乐的音量,甚至是在歌曲的间隔或者是没有背景音乐的游戏场景。
在确定了你的应用会使用哪个audio stream之后,你应该将其设置为volume stream的目标。你应该在你的App的生命周期中尽早地调用这个方法,因为在活动的生命周期中你只需要调用setVolumeControlStream()方法一次,推荐在onCreate()(控制你的多媒体播放的Activity或是Fragment使用)回调方法被调用时使用。这样就确保了不管你的App是否可见,音量都会按照用户的预期被控制。
1 setVolumeControlStream(AudioManager.STREAM_MUSIC);
在调用了setVolumeControlStream()方法后,按设备的音量按钮会影响你指定的audio stream的音量(在上面的例子中是“music”),不管目标activity或fragment是否可见。
使用硬件的播放控制按钮来控制App audio的播放
为了响应多媒体按钮的点击事件,你需要在你的manifest中注册一个 BroadcastReceiver来监听 ACTION_MEDIA_BUTTON action。
1 <receiverandroid:name=".RemoteControlReceiver"> 2 <intent-filter> 3 <actionandroid:name="android.intent.action.MEDIA_BUTTON"/> 4 </intent-filter> 5 </receiver>
上述receiver表明它需要获取到是哪个按钮被点击从而导致上述的广播。在Intent中的extra的key为EXTRA_KEY_EVENT 中有相应的信息,在KeyEvent类中定义了一组静态变量KEYCODE_MEDIA_*,它们代表了每个可能被点击的多媒体按钮,例如KEYCODE_MEDIA_PLAY_PAUSE 和 KEYCODE_MEDIA_NEXT.
下面的代码片段展示出了如何获取多媒体按钮的点击事件并且依据该事件来影响多媒体的播放。
1 publicclassRemoteControlReceiverextendsBroadcastReceiver{ 2 @Override 3 publicvoid onReceive(Context context,Intent intent){ 4 if(Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())){ 5 KeyEventevent=(KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 6 if(KeyEvent.KEYCODE_MEDIA_PLAY ==event.getKeyCode()){ 7 // Handle key press. 8 } 9 } 10 } 11 }
因为许多应用程序都可能会监听多媒体按钮的点击事件,你需要在你的App需要监听多媒体按钮的点击事件的时候通过编码的方式监听并控制多媒体按钮的点击事件。
下面的代码可以用在你的App中,使用 AudioManager注册和注销你的多媒体按钮点击事件receiver。当receiver被注册后,你注册的广播接收器是接收多媒体按钮广播唯一的接收器。
1 AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 2 ... 3 4 // Start listening for button presses 5 am.registerMediaButtonEventReceiver(RemoteControlReceiver); 6 ... 7 8 // Stop listening for button presses 9 am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 10
通常,Android的应用程序需要在他们变得不活跃或是不可见(例如在onStop()回调方法被调用时)的时候注销它们的receivers。然而,对于多媒体播放的App来说往往并非如此简单,当你的应用程序运行在后台的时候往往更需要响应多媒体播放按钮的点击事件。
在你的应用程序获得audio焦点时注册多媒体按钮事件监听receiver,在失去audio焦点时注销多媒体按钮事件监听receiver是一个更好解决方案。在下一章将会详细讲解。
1-控制App的音量和多媒体文件的播放(Managing Audio Playback)
标签:
原文地址:http://www.cnblogs.com/xlk0101/p/5100258.html