android 7.0以后需要使用FileProvider来获取照片
第一步:现在AndroidManifest.xml中注册provider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.admin.test"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
第二步:鼠标右键点击res新建XML文件,如下图:
file_paths.xml里面代码如下:
<?xml version="1.0" encoding="utf-8"?>
<Path>
<external-path
name="images"
path="test/" />
</Path>
第三步:在activity中写拍照代码:
/**
* ----拍照
*/
private void takePhoto() {
try {
//判断是否有相机
boolean b = PhotoUtils.hasCamera(TestActivity.this);
if (b) {
String name = "test.jpg";
LogUtil.e(aaa, "name-->" + name);
File mFile = new File(parentFile);
if (!mFile.exists()) {
mFile.mkdirs();
}
LogUtil.e(aaa, "filename-->" + parentFile);
//照片
mPhotoFile = new File(parentFile, name);
Uri fileUri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//步骤二:Android 7.0及以上获取文件 Uri
fileUri = FileProvider.getUriForFile(TestActivity.this, "com.admin.test", mPhotoFile);
} else {
//步骤三:获取文件Uri
fileUri = Uri.fromFile(mPhotoFile);
}
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(captureIntent, 0);
} else {
Toast.makeText(TestActivity.this, "系统无相机", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
LogUtil.e(aaa, "-err->" + e.getMessage());
}
}
第四步:在onActivityResult中就可以拿到照片:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == 0) {
try {
Uri uri = FileProvider.getUriForFile(this, "com.admin.test", mPhotoFile);
LogUtil.e(aaa,"uri->"+uri);
Bitmap bitmap = getBitmapFormUri(uri);
iv.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
LogUtil.e(aaa, e.getMessage());
}
}
}