打开相机
1、权限
6.0之后修改动态获取权限
打开照相机的权限
<uses-permission android:name="android.permission.CAMERA"/>
读写SD卡权限(保存本地、显示页面)
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
2、动态获取权限
Build.VERSION_CODES.M == 23,23以上为6.0以上版本,动态获取图片
if (Build.VERSION_CODES.M <= Build.VERSION.SDK_INT){
requestPermissions(new String[]{
"android.permission.CAMERA",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"
},100);
}
3、打开照相机,拍照并保存本地
//MediaStore.ACTION_IMAGE_CAPTURE 打开照相机(拍照)
//MediaStore.ACTION_VIDEO_CAPTURE 打开摄像机(录制视频)
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//保存照片
Uri uri = FileProvider.getUriForFile(getContext(), "com.bawei.day01_mvp", new File(path));
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
//回调 更换图片
startActivityForResult(intent, 102);
4、配置清单文件
<provider
//参数 包名
android:authorities="com.bawei.day01_mvp"
//参数 FileProvider导包路径
android:name="androidx.core.content.FileProvider"
android:grantUriPermissions="true">
//下图讲解
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
//配置path文件
android:resource="@xml/path"></meta-data>
</provider>
android:name=“android.support.FILE_PROVIDER_PATHS”
怎么找?
androidx.core.content.FileProvider Ctrl+鼠标点进类里面找下面的这句代码
copy大法
private static final String
META_DATA_FILE_PROVIDER_PATHS = "android.support.FILE_PROVIDER_PATHS";
5、配置path文件
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="mypath"
//path 为根路径信息
path="DCIM"/>
</paths>
6、保存本地之后更换UI图片
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 102 && resultCode == Activity.RESULT_OK) {
//回调展示到页面
ShowImageUtils.getInstance().showImage(getContext(), path, R.drawable.ic_launcher_background, ivImage);
}
}