美文网首页
安卓调用系统相机拍照无法返回的问题

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

作者: 水妖 | 来源:发表于2020-02-11 16:01 被阅读0次

    类似于调用第三应用   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;

    }

    }

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ecyxfhtx.html