使用摄像头拍摄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"/> |
运行
