Android学习笔记(十一)
- 摄像头与相册
- 调用摄像头拍照
- 创建一个File对象,用于拍照后存储图片。传入两个参数,第一个参数为存储地址,第二个参数为存储文件名称。
- 调用Environment的getExternalStorageDirectory()方法获取SD卡的根目录地址作为第一个参数。
- 调用Uri的fromFile()方法将File对象转换为Uri方法
- 构建一个Intent的putExtra()方法指定图片的输出地址,填入得到的Uri对象。
- 最后调用startActivityForResult()来启动活动。
- 在onActivityResult()方法中,如果拍照成功,构建一个新的Intent,把action指定为com.android.camera.action.CROP。给这个Intent设置一些必要的属性后,再次调用startActivityForResult()来启动剪裁活动。
- 程序回调到onActivityResult()方法后,调用用BitmapFactory的decodeStream()方法将output_image.jpg这张照片解析成Bitmap对象,然后把它设置到ImageView中显示出来。
- 最后进行声明
android.permisson.WRITE_EXTERNAL_STOPAGE
- 从相册中选择照片
- 创建一个File对象用于存储相册中选择的图片
- 构建一个Intent对象,将其action指定为android.intent.action.GET_CONTENT.
- 给Intent设置一些必要参数,包括是否允许缩放和剪裁,图片的输出位置。
- 调用startActivityForResult()方法,给第二个参数传入CROP_PHOTO常量,直接调用前一个显示图片的逻辑。
- 调用摄像头拍照
- 播放音频
- 创建一个MediaPlayer对象,然后在onCreate()方法中调用了initMediaPlayer()方法为MediaPlayer对象进行初始化操作。
- 在initMediaPlayer中创建一个File对象来制定音频路径,依次调用setDataSource()方法和prepare()方法为MediaPlayer做好播放准备。
- 点击Play按钮时会进行判断,如果当前没有播放音频,则调用start()方法开始播放,当点击pause按钮时会判断,如果真正播放,则会暂停播放,当点击Stop按钮时,如果正在播放,则会调用reset()方法将MediaPlayer重置为刚创建的状态,然后重新调用initMediaPlayer()方法
- 最后在onDestroy()方法中分别调用stop()和release()方法,将与MediaPlayer相关的资源释放掉。
方法名 | 功能描述 |
---|---|
setDataSource() | 设置要播放音频文件的位置 |
prepare() | 在开始播放之前调用这个方法完成准备工作 |
start() | 开始或继续播放音频 |
pause() | 暂停播放音频 |
reset() | 将MediaPlayer对象重置到刚刚创建的状态 |
seekTo() | 从指定位置开始播放音频 |
stop() | 停止播放音频 |
release() | 释放掉与MediaPlayer对象相关资源 |
isPlaying() | 判断当前MediaPlayer是否正在播放音频 |
getDuration() | 获取载入的音频文件的时长 |
- 播放视频:使用方式与播放音频相似
方法名 | 功能描述 |
---|---|
setVideoPath() | 设置要播放视频文件的位置 |
start() | 开始或继续播放视频 |
pause() | 暂停播放视频 |
resume() | 视频从头播放 |
seekTo() | 从指定位置开始播放视频 |
isPlaying() | 判断当前是否正在播放视频 |
getDuration() | 获取载入的视频文件的时长 |
- 服务(Service):是Android中实现程序后台运行的解决方案,它适用于不需要和用户交互且需要长时间运行的任务。
- 线程的基本用法
1. 定义一个线程:新建一个类继承自Thread,重写父类的run()方法,并在里面编写耗时逻辑。也可以通过Runnable接口的方式来定义一个线程。
2. 启动一个线程:如果是通过继承,则在线程的实例中调用start()方法。如果是调用接口创建,则通过new Thread(XXX).start();