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 个回复

正序浏览
总结的内容很全面啊
回复 使用道具 举报
牛啊6666666
回复 使用道具 举报
这个真心可以
回复 使用道具 举报
赞一个...
回复 使用道具 举报
阳哥,你好啊,下载看看
回复 使用道具 举报
回复看一下  安卓的视频有多少
回复 使用道具 举报
不错,谢谢分享
回复 使用道具 举报
顶一下 支持ing
回复 使用道具 举报
非常给力!
回复 使用道具 举报
好牛的代码群
回复 使用道具 举报
一直关注哈哈哈....
回复 使用道具 举报
阳哥威武
回复 使用道具 举报
MrFly 初级黑马 2015-12-22 02:10:51
260#
好东西,就是要好好笑话
回复 使用道具 举报
一口气都给保存下来{:2_36:}
回复 使用道具 举报
恩  直接抱走啦  自己也总结过 可是总觉得差强人意 不满意
回复 使用道具 举报
~~~~~~~~~~~~~~~~飘过去,求内容
回复 使用道具 举报
好东西1!!!!!
回复 使用道具 举报
就业ban一个月了  安卓噶
回复 使用道具 举报
wx_YXxWrUwd 来自手机 中级黑马 2015-11-17 00:57:02
254#
一直在留意 真心不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马