类似于调用第三应用 android 7.0 以后 需要使用FileProvider 传递地址路径 .
AndroidManifest.xml 中
<application>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</application>
xml/file_paths:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="root_app_external"
path="Android/data/com.test.application.img"/>
</paths>
拍照
Intent intent =new Intent();
// 指定开启系统相机的Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
// 根据文件地址创建文件
File file =new File(filePath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
// 把文件地址转换成Uri格式
Uri uri = ProviderUtils.getProviderUri(mContext, intent, file);
// 设置系统相机拍摄照片完成后图片文件的存放地址
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
((Activity)mContext).startActivityForResult(intent,TakePhoto);
ProviderUtils.java
public class ProviderUtils {
public static Stringauthority;
public static void initAuthority(String authorityTemp) {
authority = authorityTemp;
}
public static Uri getProviderUri(Context context, File file) {
return getProviderUri(context,null, file);
}
public static Uri getProviderUri(Context context, Intent intent, File file) {
Uri contentUri =null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (intent !=null) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
contentUri = FileProvider.getUriForFile(context,authority, file);
}else {
contentUri = Uri.fromFile(file);
}
return contentUri;
}
public static Intent setUriPermission(Intent intent) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
return intent;
}
}
网友评论