调用系统相机崩溃

崩溃手机

机型: 华为
系统: Android 4.4.2

崩溃日志

Process: com.huawei.camera, PID: 31496
    java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord{44394a00 31496:com.huawei.camera/u0a11} (pid=31496, uid=10011) that is not exported from uid 10166
    at android.os.Parcel.readException(Parcel.java:1468)
    at android.os.Parcel.readException(Parcel.java:1422)
    at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:2865)
    at android.app.ActivityThread.acquireProvider(ActivityThread.java:4685)
    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2361)
    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1459)
    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:916)
    at android.content.ContentResolver.openOutputStream(ContentResolver.java:679)
    at android.content.ContentResolver.openOutputStream(ContentResolver.java:655)
    at com.huawei.camera.util.ActivityUtil.openOutputStream(ActivityUtil.java:72)
    at com.huawei.camera.util.ActivityUtil.writeDataToUri(ActivityUtil.java:81)
    at com.huawei.camera.ui.page.ReviewPage.handlePhotoDataResult(ReviewPage.java:117)
    at com.huawei.camera.ui.page.ReviewPage.doReturnToCaller(ReviewPage.java:107)
    at com.huawei.camera.ui.page.ReviewPage.access$000(ReviewPage.java:33)
    at com.huawei.camera.ui.page.ReviewPage$1.onClick(ReviewPage.java:49)
    at android.view.View.performClick(View.java:4446)
    at android.view.View$PerformClick.run(View.java:18480)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5315)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:680)
    at dalvik.system.NativeStart.main(Native Method)

解决办法

我是照着这个博客的方法解决的。
总结下就是两种方法。
1.在开启相机前进行兼容性判断
uri照片的uri,intent开启相机的intent

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
    intent.setClipData(ClipData.newRawUri("", uri));
    intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION|Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

2.直接给予系统相机所需要的权限
grantUriPermission("com.huawei.camera", uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

你可能感兴趣的:(调用系统相机崩溃)