簡體   English   中英

由於需要READ_EXTERNAL_STORAGE權限而崩潰,即使它在清單中

[英]Crash due to requiring READ_EXTERNAL_STORAGE permission even though it's in the Manifest

我的任務是更新以前使用以下設置構建的Android應用程序:

compileSdkVersion 19
buildToolsVersion '19.0.1'

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 19
}

我下載了最新的Android Studio,最終將其更改為以下內容,以構建應用程序:

compileSdkVersion 21
buildToolsVersion '21.1.2'

defaultConfig {
    minSdkVersion 15
    targetSdkVersion 19
}

先前構建的應用程序完美運行,沒有崩潰。 不幸的是,當我現在構建它時,應用程序崩潰,但以下異常:

Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=2476, uid=10053 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

即使清單中清楚地顯示了許可:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   package="com.dbotha.app">

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

崩潰發生在為MediaStore.Images.Media.EXTERNAL_CONTENT_URI加載游標時:

new CursorLoader(
                this,
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                new String[]{
                        MediaStore.Images.Media._ID,
                        MediaStore.Images.Media.BUCKET_ID,
                        MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
                        MediaStore.Images.Thumbnails._ID
                },
                null,
                null,
                null
        );

除了將整個組件拆下來並從頭開始重新實現之外,我對如何處理感到有些困惑-我寧願避免;)

事實證明,項目依賴項在AndroidManifest.xml的庫中具有以下權限的maxSDKVersion屬性:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />

在清單合並過程中,該屬性將被包含在內,並在API版本18以上運行的任何設備上破壞東西。

解決此問題的一種方法是添加以下應用程序清單,以確保maxSdkVersion屬性不會使其進入合並的AndroidManifest.xml

<manifest
    xmlns:tools="http://schemas.android.com/tools"
    ...>

<uses-permission tools:node="replace" android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" />
<uses-permission tools:node="replace" android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM