Erlaubnis Denial: android.die Genehmigung.READ_EXTERNAL_STORAGE
Ich bin mit einem MediaStore-Klasse in meiner Anwendung und mit Blick auf den unter Fehler(logcat),
E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=5769, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:539)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:452)
at android.content.ContentProvider$Transport.query(ContentProvider.java:205)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
at android.os.Binder.execTransact(Binder.java:446)
05-11 17:27:35.982 5769-5769/com.media.wanware.fragmentdemo D/AndroidRuntime: Shutting down VM
05-11 17:27:35.984 5769-5769/com.media.wanware.fragmentdemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.media.wanware.fragmentdemo, PID: 5769
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.media.wanware.fragmentdemo/com.media.wanware.fragmentdemo.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=5769, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=5769, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1546)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:478)
at android.content.ContentResolver.query(ContentResolver.java:422)
at com.media.wanware.fragmentdemo.MainActivity.getAllSongsFromDevice(MainActivity.java:45)
at com.media.wanware.fragmentdemo.MainActivity.onCreate(MainActivity.java:29)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Ich lese diese Frage,
Android-Lesen externen Speicher gibt securityException
Aber ich platziert die Berechtigungen richtig in meinem manifest unten
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.media.wanware.fragmentdemo">
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="19" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="19" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Auch nach dem Lesen weiter ich ging auch durch diese unter Frage,
Android-Berechtigung funktioniert nicht, auch wenn ich es erklärt
Dem großen Grund für die nicht immer Ihre Berechtigung, heutzutage ist da
Ihr Projekt hat eine targetSdkVersion von 23 oder höherFür diese Berechtigungen, nicht nur, dass Ihre targetSdkVersion 23+ app
müssen Sie das element(s), aber Sie müssen auch
bitten, für die Berechtigungen zur Laufzeit vom Benutzer auf Android 6.0+
Geräte, mit Methoden wie checkSelfPermission() und
requestPermissions().Als vorübergehende Lösung, lassen Sie Ihre targetSdkVersion unter 23.
Aber meine Ziel-SDK ist unter 23 nur. Warum bin ich immer die gleichen Fehler ?
- Was ist Ihre Compiler-und target-SDK, android-version auf Ihrem Android-Gerät testen...?
- Compile SDK 19.
- Auf welchem Gerät Sie es zu testen...? Und seine android-version...?
- Auf Emulator, version 4.4.
- Sind Sie sicher, es hat nichts zu tun mit stackoverflow.com/questions/4162447/... ?
- Sie bauen mit den neuesten release-sdk. Passen Sie Ihre gradle verwenden die ältere Version sdk.
- OP: ich bearbeitet habe, zu minimieren horizontale scrollen, wie es war schwer zu Lesen - FYI
- Ich Tat es unwissentlich, bitte rückgängig machen . Es tut mir Leid
Du musst angemeldet sein, um einen Kommentar abzugeben.
SDK 23 hat alle neuen Methode und Funktionalitäten zum Umgang mit den Android-Berechtigungen zu versuchen, kompilieren Sie Ihren code mit niedriger SDK-Versionen. Dies kann Ihr problem lösen.
Und auch entfernen
maxSdkVersion
von Ihren Berechtigungen.Happy Coding 🙂
Besser als das kompilieren mit niedriger version, Sie haben, um einen entsprechenden code für alle Versionen oder irgendwann werden Sie hinter sich gelassen in der aktuellen Möglichkeiten der Programmierung, besonders bei android.
Lesen Sie diesen Artikel, wie zum anfordern von Berechtigungen zur Laufzeit hier.
Hier sehen Sie ein Beispiel, wie ich richtig das verlangen diese Berechtigung: