安卓调用系统相机拍照无法返回的问题

类似于调用第三应用   android  7.0 以后  需要使用FileProvider 传递地址路径 . 

AndroidManifest.xml 中  

    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"/>

xml/file_paths: 

 

name="root_app_external"

path="Android/data/com.test.application.img"/>

拍照

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;

}

}



你可能感兴趣的:(安卓调用系统相机拍照无法返回的问题)