【Android Training - Multimedia】管理音频播放[Lesson 1 - 控制app的音量]

原创 2012年03月21日 23:27:10

前言:

如果你的App在播放音频,显然用户能够以预期的方式来控制音频是很重要的。

为了保证好的用户体验,同样App能够获取音频焦点是很重要的,这样才能确保不会在同一时刻出现多个App的声音。

在学习这个课程后,你将能够创建对硬件音量按钮进行响应的App,当按下音量按钮的时候需要获取到当前音频的焦点,然后以适当的方式改变音量从而进行响应用户的行为。

学习前提:

  • Android 2.0 (API level 5) or higher
  • Experience with Media Playback
  • Service的基本概念

Lesson 1 - Controlling Your App's Volume and Playback

[控制App的音量与播放]

一个好的用户体验是可预期可控的。如果App是在播放音频,那么显然我们需要做到能够通过硬件按钮,软件按钮,蓝牙耳麦等来控制音量。
同样的,我们需要能够进行play, stop, pause, skip, and previous等动作,并且进行对应的响应。

Identify Which Audio Stream to Use [鉴别使用的是哪个音频流]

  • 首先需要知道的是我们的App会使用到哪些音频流。
  • Android为播放音乐,闹铃,通知铃,来电声音,系统声音,打电话声音与DTMF频道分别维护了一个隔离的音频流。这是我们能够控制不同音频的前提。
  • 其中大多数都是被系统限制的,不能胡乱使用。除了你的App是需要做替换闹钟的铃声的操作,那么几乎其他的播放音频操作都是使用"STREAM_MUSIC"音频流。

Use Hardware Volume Keys to Control Your App’s Audio Volume [使用硬件音量键来控制App的音量]

  • 默认情况下,按下音量控制键会调节当前被激活的音频流,如果你的App没有在播放任何声音,则会调节响铃的声音。
  • 如果是一个游戏或者音乐程序,需要在不管是否目前正在播放歌曲或者游戏目前是否发出声音的时候,按硬件的音量键都会有对应的音量调节。
  • 我们需要监听音量键是否被按下,Android提供了setVolumeControlStream()的方法来直接控制指定的音频流。
  • 在鉴别出App会使用哪个音频流之后,需要在Activity或者Fragment创建的时候就设置音量控制,这样能确保不管App是否可见,音频控制功能都正常工作。
setVolumeControlStream(AudioManager.STREAM_MUSIC);

Use Hardware Playback Control Keys to Control Your App’s Audio Playback [使用硬件的播放控制按键来控制App的音频播放]

  • 媒体播放按钮,例如play, pause, stop, skip, and previous的功能同样可以在一些线控,耳麦或者其他无线控制设备上实现。
  • 无论用户按下上面任何设备上的控制按钮,系统都会广播一个带有ACTION_MEDIA_BUTTON的Intent。
  • 为了响应那些操作,需要像下面一样注册一个BroadcastReceiver在Manifest文件中。
<receiver android:name=".RemoteControlReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>
  • Receiver需要判断这个广播是来自哪个按钮的操作,Intent在EXTRA_KEY_EVENT中包含了KEY的信息,同样KeyEvent类包含了一列KEYCODE_MEDIA_*的静态变量来表示不同的媒体按钮,such as KEYCODE_MEDIA_PLAY_PAUSE and 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.
            }
        }
    }
}
  • 因为可能有多个程序都同样监听了哪些控制按钮,那么必须在代码中特意控制当前哪个Receiver会进行响应。下面的例子显示了如何使用AudioManager来注册监听与取消监听,当Receiver被注册上时,它将是唯一响应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);
  • 通常,App需要在Receiver没有激活或者不可见的时候(比如在onStop的方法里面)取消注册监听。但是在媒体播放的时候并没有那么简单,实际上,我们需要在后台播放歌曲的时候同样需要进行响应。
    一个比较好的注册与取消监听的方法是当程序获取与失去音频焦点的时候进行操作。这个内容会在后面的课程中详细讲解。


学习自:http://developer.android.com/training/managing-audio/volume-playback.html

转载请注明出处:http://blog.csdn.net/kesenhoo,谢谢!



Android实现控制第三方音乐播放器暂停/播放

Android实现控制第三方音乐播放器暂停/播放
  • qq_26440221
  • qq_26440221
  • 2017年05月09日 22:36
  • 1934

Android开发之AudioManager(音频管理器)详解

AudioManager类提供了访问音量和振铃器mode控制。使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这个类的一个实例。...
  • fengyuzhengfan
  • fengyuzhengfan
  • 2014年07月27日 14:03
  • 7173

Android Multimedia框架总结(十七)音频开发基础知识

原文链接:http://blog.csdn.net/hejjunlin/article/details/53078828 近年来,唱吧,全民K歌,QQ音乐,等成为音频软件的主流力量,音频开发...
  • u010164190
  • u010164190
  • 2016年11月11日 10:29
  • 1162

管理音频播放[Lesson 1 - 控制app的音量]

前言: 如果你的App在播放音频,显然用户能够以预期的方式来控制音频是很重要的。 为了保证好的用户体验,同样App能够获取音频焦点是很重要的,这样才能确保不会在同一时刻出现多个App的声音...
  • prettyice2005
  • prettyice2005
  • 2014年04月21日 14:36
  • 472

【Android Training - Multimedia】管理音频播放[Lesson 3 - 当音频输出设备突然改变]

目录(?)[+] Dealing with Audio Output Hardware [处理音频输出硬件设备] 用户在播放音乐的时候有多个选择,可以使用内置的扬声器,有线耳机或者是支...
  • CAREIT
  • CAREIT
  • 2015年02月27日 16:29
  • 434

【Android Training - Multimedia】管理音频播放[Lesson 3 - 当音频输出设备突然改变]

Dealing with Audio Output Hardware [处理音频输出硬件设备] 用户在播放音乐的时候有多个选择,可以使用内置的扬声器,有线耳机或者是支持A2DP的蓝牙耳机。 【补充:...
  • kesenhoo
  • kesenhoo
  • 2012年03月23日 15:28
  • 2872

【Android Training - Multimedia】管理音频播放[Lesson 2 - 管理音频焦点Audio Focus]

Managing Audio Focus[管理音频焦点] 很多App都可以播放音频,因此在播放前如何获取到音频焦点就显得很重要了,这样可以避免同时出现多个声音,Android使用audio foc...
  • kesenhoo
  • kesenhoo
  • 2012年03月22日 11:16
  • 4795

3.1_Android Training 学习笔记_管理音频播放

这里面的三小节在写音乐播放器时都是很有用的。有待学习。良好的用户体验应该是可预期且可控的。 通过 Broadcast 来监听媒体按钮相关的事件AudioManager am = mContext.g...
  • android_codele
  • android_codele
  • 2016年09月20日 14:06
  • 146

笔记60 | Android控制音量与音频播放的学习

控制音量与音频播放 编写:kesenhoo 良好的用户体验应该是可预期且可控的。如果我们的应用可以播放音频,那么显然我们需要做到能够通过硬件按钮,软件按钮,蓝牙耳麦等来控制音量。 同样地,我们需要...
  • xiangyong_1521
  • xiangyong_1521
  • 2017年12月28日 09:51
  • 82

Android官方开发文档Training系列课程中文版:管理音频播放之音频输出硬件的处理

原文地址:http://android.xsoftlab.net/training/managing-audio/audio-output.html当用户使用Android设备享受音频时,它有多重的可...
  • u011064099
  • u011064099
  • 2016年04月16日 15:52
  • 937
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Android Training - Multimedia】管理音频播放[Lesson 1 - 控制app的音量]
举报原因:
原因补充:

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