1-控制App的音量和多媒体文件的播放(Managing Audio Playback)

良好的用户体验是可以被预测的。如果你的App需要播放多媒体,那么你的用户可以通过你的App利用硬件或软件的方式来控制他们的设备的音量,蓝牙耳机,头带耳机等对于他们来说是非常必要的。

同样的,在哪个位置合理恰当地提供播放、停止、暂停、跳过以及回放功能的按钮需要根据他们各自在你的App中对于audio stream的处理来决定。

控制App的音量和多媒体文件的播放主要有以下三个方面:

    确认需要使用哪个Audio Stream

 

    建立一个可预测的audio体验的第一步是理解你的App需要用到哪个audio stream。

Android系统提供一套不同的audio stream提供给播放音乐、闹钟、通知、来电提示、系统声音,通话音量以及双音多频的声调。这套机制为App的使用者通过独立的Stream来控制音量提供了可能性。

多数的stream受限于系统的事件,因此,除非你的App定位于替代系统的闹钟,你在设计时基本上会使用STREAM_MUSIC stream来播放你的audio。

    使用硬件按钮来控制你的App的Audio音量

通常,通过按音量控制按钮来控制正在被使用的audio stream的音量。如果你的App没有播放任何的多媒体文件,按音量控制按键时会调整铃声的大小。

如果你安装了游戏或者是音乐的App,那么当用户按音量按钮的时候他们通常是想要控制游戏或是音乐的音量,甚至是在歌曲的间隔或者是没有背景音乐的游戏场景。

这个时候你可能会尝试监听音量按钮的点击事件,然后调整你App使用的audio stream的音量。这种方法我们不推荐。Android系统提供了便利的setVolumeControlStream() 方法,在按音量按钮时直接调整你指定的audio stream的音量。

在确定了你的应用会使用哪个audio stream之后,你应该将其设置为volume stream的目标。你应该在你的App的生命周期中尽早地调用这个方法,因为在活动的生命周期中你只需要调用setVolumeControlStream()方法一次,推荐在onCreate()(控制你的多媒体播放的Activity或是Fragment使用)回调方法被调用时使用。这样就确保了不管你的App是否可见,音量都会按照用户的预期被控制。

1 setVolumeControlStream(AudioManager.STREAM_MUSIC);

在调用了setVolumeControlStream()方法后,按设备的音量按钮会影响你指定的audio stream的音量(在上面的例子中是“music”),不管目标activity或fragment是否可见。

    使用硬件的播放控制按钮来控制App audio的播放

在某些连接网络或者是无线的手机上面多媒体按钮是可用的,例如播放、暂停、停止、下一个与前一个。不管何时一个用户按上面硬件中的任何一个,系统将发一条广播,该广播的intent包含 ACTION_MEDIA_BUTTON 的action。

为了响应多媒体按钮的点击事件,你需要在你的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是一个更好解决方案。在下一章将会详细讲解。

时间: 2024-10-13 00:12:26

1-控制App的音量和多媒体文件的播放(Managing Audio Playback)的相关文章

使用Vitamio打造自己的Android万能播放器(2)—— 手势控制亮度、音量、缩放

前言 本章继续完善播放相关播放器的核心功能,为后续扩展打好基础. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 系列 1.使用Vitamio打造自己的Android万能播放器(1)——准备 正文 一.实现目标 1.1 亮度控制 模仿VPlayer界面: 1.2 声音控制 模仿VPlayer界面: 1.3 画面缩放 根据下面API提供画面的拉伸.剪切.100%.全屏 二.Vitami

动画的内容与控制:动画是视图序列的播放

数据结构与算法的观点: 数据结构:视图序列: 算法:播放控制: 动画是采用连续播放静止图像的方法产生物体运动的效果. 动画是视图(图像)序列的播放: 动画的内容:图片 包含图片的生成: 图片的处理:合成.光学.几何操作等: 动画的控制:动画的播放控制 播放的基本单元是帧: 播放是将图片序列在时间轴上逐帧展示: 播放的控制: 1.速率控制 2.时长控制: 3.反复控制: 4.停播控制: 原文地址:https://www.cnblogs.com/feng9exe/p/10345488.html

Android App中使用Gallery制作幻灯片播放效果

http://www.jb51.net/article/83313.htm 我们有时候在iPhone手机上或者Windows上面看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果,还可以根据你的点击或者触摸触发其他事件响应.同样的,在Android中也提供这这种实现,这就是通过Gallery在UI上实现缩略图浏览器. 我们来看看Gallery是如何来实现的,先把控件从布局文件中声明,只需知道ID为gallery. ? 1 Gallery gallery = (Gallery

Android官方开发文档Training系列课程中文版:目录

原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻译成英文,供国内的开发者使用,尤其是入门开发者,虽然现在网络上有很多入门课程,但是还是依靠官方文档学习来的靠谱,安卓官方文档是一系列的课程,使每个人可以系统的掌握安卓的知识,相比其它课程来说,它为开发者提供了查缺补漏的功能. 在这里你可以领略到安卓开发世界的精彩. Tips : 同时,本目录可以作为

Android Audio Play Out Channel

1: 7嘴8舌 扬声器, 耳机, 和听筒 就是通过: audiomanager.setmode(AudioManager.MODE_IN_COMMUNICATION)audiomanager.setSpeakerhponeOn(boolean value).这两个来设置.不过有的好像不支持的. 米手机上切换 扬声器和听筒不能切换 Android AudioTrack音频播放分析 音频资源在播放时,会经常出现冲突的情况,如在进行音乐播放时有电话呼入.有新消息的提示音需要播放等,此类的并发处理就需要

Android官方文档training中英文翻译目录大全:29篇已翻译,45篇未翻译

Android官方文档training中英文翻译目录大全:29篇已翻译,45篇未翻译 1. Getting Started Building Your First App: 原文: https://developer.android.com/training/basics/firstapp/index.html译文:http://wiki.eoeandroid.com/Building_Your_First_AppAdding the Action Bar:原文:https://develope

iOS调节系统音量

目录[-] 使用MPVolumeView 编程实现系统音量调节2 通过MPVolumeSlider的实例来操作系统音量 有问题!我不喜欢系统弹出音量提示 还有问题,我修改了系统音量但是不是通过我的UI iOS的AVFoundation框架提供了基本的音视频播放工具,我们基本上可以靠其中提供的类完成绝大部分的音视频播放任务.但是在音频播放的输出音量的处理上,苹果的策略比较保守.尽管AVPlayer和AVPAudiolayerzhe这些类提供了音量调节功能,但这些音量控制属于App级别的控制.好处就

iOS 审核app被拒绝的各种理由以及翻译

原 apps被拒绝的各种理由以及翻译:http://my.oschina.net/201003674/blog/356189#OSC_h1_3 1. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by the terms of the Program License Agreement (PLA), Human Interface Guidelines

iOS编程修改系统音量

iOS的AVFoundation框架提供了基本的音视频播放工具,我们基本上可以靠其中提供的类完成绝大部分的音视频播放任务.但是在音频播放的输出音量的处理上,苹果的策略比较保守.尽管AVPlayer和AVPAudiolayerzhe这些类提供了音量调节功能,但这些音量控制属于App级别的控制.好处就是音量调节独立于系统音量,调节大小时不会影响系统音量.但有时候我们可能希望修改系统音量,以免在调节声音的时候,如果系统音量过小,App调节音量效果不明显.一般来说要调节系统音量会有以下方法: 请注意:修