首页 文章

Android权限错误即使在manifest.xml中声明也是如此

提问于
浏览
1

我试图打开一个意图从Android画廊中选择一张照片,然后在父活动中使用所选图像设置一个图像视图 . 我能够打开图库并选择和图像,但是父活动在onActivityResult()方法中崩溃了 . 崩溃发生在Cursor实例化行中 .

<!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality. 
    -->
    <!--<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- To auto-complete the email text field in the login form with the user's emails -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

结果方法的父活动

Uri selectedImage = data.getData();
        if(!isExternalStorageReadable()) {
            Log.d("NAMSD", "SS");
        } else {
            Log.d("hey", selectedImage.toString());

            String[] filePathColumn = {MediaStore.Images.Media.DATA};


            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);

            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);

            String picturePath = cursor.getString(columnIndex);

            cursor.close();

            Bitmap imageBitmap = BitmapFactory.decodeFile(picturePath);

            photo.setImageBitmap(imageBitmap);
        }

Stach Trace:

02-16 16:09:54.108 1803-1815 /? E / DatabaseUtils:向parcel写入异常java.lang.SecurityException:Permission Denial:从pid = 8382读取com.android.providers.media.MediaProvider uri content:// media / external / images / media / 37,uid = 10057要求在Android.content.ContentProvider的android.content.ContentProvider $ Transport.enforceReadPermission(ContentProvider.java:480)上的android.permission.READ_EXTERNAL_STORAGE或grantUriPermission()android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:605)$ Transport .query(ContentProvider.java:211)在android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)在android.os.Binder.execTransact(Binder.java:453)02-16 16:09:54.108 8382-8382 /? D / AndroidRuntime:关闭VM 02-16 16:09:54.109 8382-8382 /? E / AndroidRuntime:FATAL EXCEPTION:main进程:io.github.getExposure,PID:8382 java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 3,result = -1,data = Intent {dat = content :// media / external / images / media / 37}}到activity {io.github.getExposure / io.github.getExposure.PostViewActivity}:java.lang.SecurityException:Permission Denial:读取com.android.providers.media . MediaProvider uri content:// media / external / images / media / 37 from pid = 8382,uid = 10057需要android.permission.READ_EXTERNAL_STORAGE,或者在android.app.ActivityThread.deliverResults(ActivityThread.java:3699)的grantUriPermission() android.app.A活动中的android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)在android.app上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1393)的android.app.ActivityThread.-wrap16(ActivityThread.java) . Handler.dispatchMessage(Handler.java:102)在android.app.Looper.loop(Looper.java:148)的android.app.ActivityThread.main(ActivityThread.java:5417)at ja Com.android.internal.os.ZygoteInit.main(ZygoteInit.java)中的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)中的va.lang.reflect.Method.invoke(Native Method) :616)引起:java.lang.SecurityException:Permission Denial:从pid = 8382读取com.android.providers.media.MediaProvider uri content:// media / external / images / media / 37,uid = 10057需要android . android.Database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java)上的android.dos.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)上的android.os.Parcel.readException(Parcel.java:1599)中的permission.READ_EXTERNAL_STORAGE或grantUriPermission() :135)android.content.ContentProviderProxy.query(ContentProviderNative.java:421)在android.content.ContentResolver.query(ContentResolver.java:491)的android.content.ContentResolver.query(ContentResolver.java:434)at io android.app.Activity.dispatchActivit上的.github.getExposure.PostViewActivity.onActivityResult(PostViewActivity.java:135) yResult(Activity.java:6428)在android.app.ActivityThread.deliverResult(ActivityThread.java:3695)的android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)android.app.ActivityThread.-wrap16(ActivityThread . java)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1393)at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:148)at android.app.ActivityThread.main(ActivityThread.java:5417)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)at at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

2 回答

  • 0

    问题不明确,但我怀疑你正在使用android-23 API(Marshmallow)进行编译,并且它已经引入了一种新的方式来询问用户当场使用它的权限,因此有两个选择

    • Recommended )在使用之前询问用户该权限 . 更多信息here .

    • NOT recommended )将目标API更改为Marshmallow之前的版本,并恢复为询问应用程序安装的所有权限的旧方式 .

  • 0
    permissions = new String[2];
        permissions[0] = Manifest.permission.WRITE_EXTERNAL_STORAGE;
        permissions[1] = Manifest.permission.READ_EXTERNAL_STORAGE;
        ActivityCompat.requestPermissions(
                this,
                permissions,
                5
        );
    

    我只需要明确要求读/写权限由于android marshmallow在我的活动中的外部存储 .

相关问题