A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王震阳老师 于 2015-3-30 14:43 编辑










汇总贴:http://bbs.itheima.com/thread-180149-1-1.html
pdf附件回复可下载:
游客,如果您要查看本帖隐藏内容请回复

Android-多媒体&传感器
1. 音频播放(★★1.1 MediaPlayer
MediaPlayer播放器状态流程如下图:
该播放器同时只能播放一个音乐文件,文件大小并没有限制。
:MediaPlayer必须严格按照状态图操作,否则就会出现错误,这些错误都是底层抛出,严格按照状态图操作的话一般就不会出问题。
使用MediaPlayer播放音乐的步骤
1.2 SoundPool
    SoundPool和其他声音播放类相比,其特点是可以自行设置声音的品质、音量、播放比率等参数。并且它可以同时管理多个音频流,每个流都有独自的ID,对某个音频流的管理都是通过ID进行的。
1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能用一些很短的声音片段,而不是用它来播放歌 曲或者做游戏背景音乐。
   2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。
3. SoundPool的效率问题。其实SoundPool的效率在这些播放类中算是很好的了,这可能会影响用户体验。也许这不能管SoundPool本身,因为到了性能比较好的Droid中这个延迟就可以让人接受了。
使用SoundPool播放音乐的步骤
1.3使用两种方式播放音乐
该案例比较简单,布局中只需两个按钮,一个用于播放MediaPlayer一个用于播放SoundPool。我们需要将事先准备好的因为文件放到res/raw目录下,其中raw目录需要我们新创建。
代码清单如下:
1.4案例-音乐播放器
:制作一个播放器,能够播放/暂停/停止/重播音乐文件,并且添加一个SeekBar,音乐播放时,SeekBar的滚动条也会变化,拖动SeekBar,可更改声音播放的进度。
:要实现此音乐播放器,必须严格按照上方的MediaPlayer状态流程图进行控制,否则非常容易使应用程序出错挂掉。
新创建一个Android工程《音乐播放器》
修改并使用默认布局文件,布局文件清单如下:
使用并编写默认的MainActivity类,在该类中实现核心业务逻辑。代码清单如下:
  



运行上面的工程,效果图如下:
2. 视频播放(★★2.1 使用MediaPlayer+SurfaceView播放视频文件
:在这里视频播放依然通过MediaPlayer类,为了方便演示,我们直接使用1.4章节中的创建的工程,只需在布局文件添加SurfaceView控件即可。
我们直接在1.4章节的代码基础上进行修改,修改MainActivity类,这里只给出不同的代码片段:
添加如下变量的声明
在play()方法中添加如下代码
获取SurfaceView对象,并设置缓存方式
运行该工程,效果图如下:
2.2 使用VideoView控件显示视频
VideoView跟MediaPlayer相比播放视频步骤要简单的多,因此VideoView自己提供了播放,暂停、快进、快退、进度条等方法。使用起来要方便的很多。
:1、设置布局文件,布局文件比较简单,因此这里只给你VideoView标签。
  • 设置VideoView的播放文件路径和媒体控制器,调用start方法即可播放媒体文件
  • 覆写MediaPlayerControl接口中的抽象方法
:上面的方法都是回调方法,我们可以在这些方法里面实现我们的业务逻辑。但是当我们给VideoView设置setMediaController后,控制器才会出现。
4、运行上面代码,效果图如下:
3. 传感器(★★3.1 Android中常见的传感器
Android手机中内置了很多传感器,其主要类型有:方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。
方向传感器     Sensor.TYPE_ORIENTATION
加速度(重力)传感器 Sensor.TYPE_ACCELEROMETER
光线传感器     Sensor.TYPE_LIGHT
磁场传感器     Sensor.TYPE_MAGNETIC_FIELD
距离(临近性)传感器 Sensor.TYPE_PROXIMITY
温度传感器     Sensor.TYPE_TEMPERATURE
3.2 传感器的使用
获取传感器管理器SensorManager:
通过传感器管理器对象获得指定类型的传感器:
通过传感器管理器对象获得手机中所有的传感器:
使用传感器管理器对象注册传感器来使一个传感器工作:
:
listener :传感器事件监听器
sensor :要被注册的传感器对象
rate :采样率,分为最快、游戏、普通、用户界面几种当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。
采样率的四种类型详解:
最快: SensorManager.SENSOR_DELAY_FASTEST
最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能
游戏: SensorManager.SENSOR_DELAY_GAME
游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别
普通: SensorManager.SENSOR_DELAY_NORMAL
标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象
用户界面: SensorManager.SENSOR_DELAY_UI
一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用
3.3 案例-公交防盗
:当手机从衣服兜里被掏出时,手机响铃报警。
:使用距离传感器,当距离从0变为1时,使用MediaPlayer播放声音文件报警
  • 设置布局文件:添加一个报警按钮开关,用于开启/停止报警功能
  • 声明成员变量
  • 使当前类继承SensorEventListener并覆写抽象方法
  • 实现Button的按钮事件,点击开启或者关闭音乐
  • 覆写Activity的onCreate方法,在该方法里面实现MediaPlayer的初始化以及传感器的监听
4. 摄像头(★★4.1 调用系统摄像头实现照相和摄像功能
调用系统摄像头进行拍照和摄像无需添加权限,直接调用即可。只需知道系统摄像头的action和category就可以调用系统摄像头。
步骤:
  • 打开Android源码,查看”\packages\apps\”文件文件目录下的Camera应用,即系统摄像头的应用程序。打开其清单文件文件,查看其Activity的action和category信息
  • Camera类的action和category


VideoCamera类的action和category
  • 已知调用系统摄像头拍照和摄像功能对应的action和category信息,采用隐式调用的方式调用Activity。
由于希望在调用拍照或摄像功能后回到当前应用的界面,且得知拍照或摄像的结果如何,是否成功,所以在开启Activity时不能使用startActivity方法,而是使用startActivityForResult方法开启Activity,并重写onActivityResult方法处理回传的数据。
:布局文件比较简单,界面只有两个按钮,一个用于打开照相机,一个用于打开摄像机。这里只给出代码清单。
拍照功能
摄像功能(摄像功能跟拍照功能比仅仅是action不同而已)
4.2 编码实现照相功能
使用Camera+SurfaceView控件可实现拍照功能。
步骤:
  • 设置布局文件:一个SurfaceView和一个拍照按钮
  • 在清单文件中添加2个权限信息
  • 声明成员变量

  • 获取SurfaceView控件的实例,通过其辅助类SurfaceHolder对象添加CallBack接口的实现
  • 添加点击拍照按钮的点击事件:设置摄像头自动对焦,对焦完成后保存图片并重新预览


4.3 编码实现摄像功能
使用Camera+MediaRecoder + SurfaceView控件可实现录制视频的功能。

所需权限:
  • 设置布局文件:一个SurfaceView+一个开始录制按钮+一个停止录制按钮
  • 在清单文件中添加权限信息:摄像头+录音+写SD卡
  • 声明要使用的成员变量
  • 获取SurfaceHolder,添加回调方法
  • 重写Callback接口的surfaceCreated和surfaceDestroyed方法:SurfaceView创建时初始化摄像头,销毁时释放摄像头资源
  • 添加点击开始录制按钮时的逻辑
  • 添加点击停止录制时的逻辑


至此,本文档完!


2014年12月24日星期三 22:30:43
北京市海淀区东北旺中路东馨园


290 个回复

倒序浏览
拜谢阳哥,大家快来膜拜!~:lol
回复 使用道具 举报
好贴要顶
回复 使用道具 举报
我报了IOS ,还想学andriod怎么办,怎么办
回复 使用道具 举报
顶一下、顶一下
回复 使用道具 举报
火钳流明
回复 使用道具 举报
{:2_36:}阳哥威武!好资料要共享!
回复 使用道具 举报
ccjlxq 中级黑马 2015-3-30 14:54:52
8#
:lol:victory:
回复 使用道具 举报
阳哥!棒棒哒
回复 使用道具 举报
赞一个。。
回复 使用道具 举报
:):D:):D:loveliness:!!!!!
回复 使用道具 举报
学习新知识
回复 使用道具 举报
顶一下、顶一下
回复 使用道具 举报
终于等到阳哥更新了:#
回复 使用道具 举报
强子 黑马帝 2015-3-30 16:50:04
15#
震阳大神V5啊!{:3_47:}
回复 使用道具 举报
这有些英文都不了解啊
回复 使用道具 举报
顶一下、顶一下
回复 使用道具 举报
支持  支持
回复 使用道具 举报
:)赞一下
回复 使用道具 举报
存下了,表示赞!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马