使用摄像头拍摄Demo
如何实现调用摄像头
- 1.创建一个
File
对象,存放摄像头拍下的图片 - 2.调用
getExternalCacheDir()
获取缓存目录,存放图片 - 3.接下来解决版本适配问题,如果Android版本低于7.0,直接用
Uri.fromFile
将图片转化为Uri对象;否则调用FileProvider
的getUriForFile()
转化为封装后的Uri对象【用内容提供器】,参数一:context,参数二:任意的唯一字符串,参数三:File对象 - 构建
Intent
对象,将其action
指定为android.media.action.IMAGE_CAPTURE
。用putExtra()
指定图片输出地址为Uri对象
- 最后调用
startActivityForResult()
隐式启动intent
,这样返回的图片会输出为图片文件 onActivityResult()
判断图片是否成功返回,如果成功,调用BitmapFactory.decodeStream()
将图片解析为Bitmap
对象,再显示出来
布局
1 |
|
对应活动
1 | public class MainActivity extends AppCompatActivity implements View.OnClickListener { |
将上面用到的内容提供器添加注册
android:name
属性值固定,android:authorities
和第二个参数一致,指定Uri的共享路径,并引用了一个@xml/filepaths
资源
authorities
:一个标识,在当前系统内必须是唯一值,一般用包名。exported
:表示该FileProvider
是否需要公开出去。granUriPermissions
:是否允许授权文件的临时访问权限。这里需要,所以是 true。
1 | <provider |
创建上一步需要的文件
在res
目录新建一个xml
目录,下面新建file_path.xml
文件,然后修改其中内容,name
随便填,path
表示要共享的目录:
1 |
|
适配旧版本
为了适配Android 4.4
之前的手机,还要声明访问SD卡
的权限:
1 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |