Android Developers:控制你的应用程序音量和播放

翻译 2013年12月03日 09:43:42

好的用户体验是可以预测的。如果你的应用程序播放音频,你的用户能使用硬件或者软件音量控制,来控制他们设备,蓝牙耳机,或者听筒的音量是非常重要的。 

 

相似的,在适当的地方可用,播放,停止,暂停,上一首,和下一首媒体回放键,应该在你的应用使用的音频流上执行它们各自的动作 

 

确定在使用哪个音频流 

——————————————————————————————— 

创建一个可预测的音频体验的第一步是知道你的应用程序将会使用哪个音频流 

 

Android维护一个单独的音频流来播放音乐,铃声,消息,来电铃声,系统声音,来电,音量提升和DTMP调节。这样做的主要目的是为了允许用户来单独的控制每个流的音量。 

 

大多数这些流都被系统事件限制,所以除非你的应用程序是闹钟的替代,你几乎肯定能使用STREAM_MUSIC流播放你的音频 

 

使用硬件音量键来控制你的应用个程序的音量 

————————————————————————————————————————————————————————————————— 

默认情况下,按音量键修改当前活动音频流的音量。如果你的应用当前没有播放任何音乐,按这个音量键调整铃声音量 

 

如果你有一个游戏或者音乐应用,他们想当用户按音量键的时候,是控制游戏或者音乐音量的好机会,即使他们当前在歌曲之间或者在当前游戏没有音乐播放。 

 

你可能会尝试和并监听音量键,通过这种方法修改你的音频流的音量。抵制冲动。Android提供了便利的setVolumeControlStream()方法直接按音量键到你指定的音频流 

 

已经确定了你的应用程序将要使用的音频流,你应该把它设置为音频流目标。你应该在你的生命周期早期调用它因为你仅仅需要在Activity生命周期调用它一次,你通常应该在onCreate()方法中调用它(控制你的媒体的Activity或者Fragment)。这保证你的应用在任何时候都是可见的,音量控制功能为用户所期待的 

setVolumeControlStream(AudioManager.STREAM_MUSIC); 
从此以后,在设备上按压音量键将影响你指定的音频流(在”音乐“的请款跪下)无论目标Activity或者Fragment是否可见 

 

使用硬件回放控制键来控制你的应用程序的音频播放 

—————————————————————————————————— 

媒体回放键,如播放,暂停,停止,上一首和先一手在一些手机和一些连接的无线耳机是有效的。无论用户什么时候按下这些键中的一个,系统广播一个包含ACTION_MEDIA_BUTTION动作的Intent。 

 

为了响应音频按钮点击,你需要在你的清单文件中注册一个BroadcastReceiver,来监听这个广播动作,如下所示 

<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注册或知道你的媒体按钮事件接受者。当注册的时候,你的broadcast receiver是所有媒体按钮广播的独有接受者 

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 
... 
 
// Start listening for button presses 
am.registerMediaButtonEventReceiver(RemoteControlReceiver); 
... 
 
// Stop listening for button presses 
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 
通常,应用应该注销大部分它们的接受者,只要它们变得不活跃或者不可见(如当onStop()回调方法)。然而,对于媒体播放应用没有那么简单事实上,响应媒体回放按钮在你的应用程序不可见的时候是非常重要的,因此它们不能被屏幕中的UI控制 

 

一个更好的方式是注册和注销媒体播放按钮事件接受者,在你的应用程序获取和失去音频焦点的时候。这在下一个课程中详细的说明 


新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息!(甭客气!尽情的扫描或者长按!)

相关文章推荐

Android Developers:允许其它应用程序启动你的Activity

前面的两节课程集中在故事的一面:从你的应用程序启动其它应用程序的Activity。但是如果你的应用程序能执行一个动作,它对于其它应用程序非常有用, 你的应用程序应该准备相应来自其它应用程序的请求。例如...

Android-简单播放器——播放( 应用程序、内存卡以及网络音乐)

1、简单播放器——播放( 应用程序、内存卡以及网络音乐)

Tiny6410Android应用程序(JNI)控制GPIO

Android与驱动的新手,因为最近需要学习为开发板编写Android驱动,因此参考了网上的一些教程,实现了最基本的GPIO驱动以及简单的APP界面来入个门。 开发环境如下:FriendlyArm-T...

Android应用程序通过JNI控制LED

PC机:ubuntu 12.04.5 开发板:tiny4412  Android版本:5.0.2 Android IDE:Android Studio 前提: PC机已经搭建好 Andr...

有效控制Android应用程序的耗电量

摘要:如何才能降低Android应用程序的耗电量呢?今天再一次回顾了一下09年Google IO大会Jeffrey Sharkey的演讲(Coding for Life — Battery Life,...

利用Ptrace在Android平台实现应用程序控制

转:http://hi.baidu.com/harry_lime/item/9a23bbd9ebd936b1260ae7db 利用Ptrace在Android平台实现应用程序控制 ...

ok6410Android应用程序:(jni方式)控制LED/GPIO

前面文章介绍了如何编写led驱动模块,这里介绍如何编写一个Android应用程序去控制LED/GPIO.小弟不才,不会用JAVA,所以这个应用程序是用C写的,然后用java实现了几个按钮,代码和外观都...
  • colwer
  • colwer
  • 2012-10-23 14:45
  • 2413

有效控制Android应用程序的耗电量

首先我们来看看Android手机的电量都主要消耗在了什么地方:   显而易见,大部分的电都消耗在了网络连接、GPS、传感器上了。 简单的说也就是主要在以下情况下耗电比较多:   1、大数据量的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)