Ich versuche, auf Mediendateien (Musik) auf dem Gerät des Benutzers zuzugreifen, um sie abzuspielen. eine einfache “Hello World”-Musikplayer-App.
Ich habe einige Tutorials befolgt und sie geben im Grunde den gleichen Code. Aber es wird nicht funktionieren; es stürzt ständig ab und sagt mir:
error.....
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=27696, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
....
Nun, das ist meine Manifestdatei:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="slimsimapps.troff" >
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Dies ist meine Java-Methode:
public void initialize() {
ContentResolver contentResolver = getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
if (cursor == null) {
// query failed, handle error.
} else if (!cursor.moveToFirst()) {
// no media on the device
} else {
do {
addSongToXML(cursor);
} while (cursor.moveToNext());
}
}
Ich habe versucht:
So platzieren Sie dies an verschiedenen Stellen in der Manifestdatei:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE”/>
So fügen Sie android:maxSdkVersion bei Read External Storage Premission hinzu:
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="21" />
So fügen Sie dies in das manifest / application / activity-tag ein:
android:exported=“true”
GrantUriPremission zwischen uri und cursro in der javamethod einfügen:
grantUriPermission(null, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
Um dies zu verwenden, stürzt es nicht ab, aber der Cursor wird null:
uri = MediaStore.Audio.Media.getContentUri("EXTERNAL_CONTENT_URI”);
Um INTERNAL content uri zu verwenden, funktioniert dies wie erwartet, aber es gibt nur “OS-Sounds” wie Shutter-Sound, Low-Battery-Sound, Button-Click und dergleichen:
uri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;
Bitte helfen Sie, das sollte kein schwieriges Problem sein, ich weiß, aber ich fühle mich wie ein Anfänger!
ich habe gelesen und versucht (oder für mein Problem als nicht anwendbar angesehen):
- Die Android-Berechtigung READ_EXTERNAL_STORAGE funktioniert nicht
- Berechtigung nur für ältere Android-Versionen erforderlich: maxSdkVersion funktioniert nicht?
- Holen Sie sich den Dateinamen und den Pfad von der URI von Mediastore
- Android KitKat securityException beim Versuch, aus MediaStore zu lesen
- Android: java.lang.SecurityException: Permission Denial: start Intent
Stack-Trace:
09-08 06:59:36.619 2009-2009/slimsimapps.troff D/AndroidRuntime﹕ Shutting down VM
--------- beginning of crash
09-08 06:59:36.619 2009-2009/slimsimapps.troff E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: slimsimapps.troff, PID: 2009
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4452)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=2009, uid=10059 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1599)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:491)
at android.content.ContentResolver.query(ContentResolver.java:434)
at slimsimapps.troff.MainActivity.initialize(MainActivity.java:106)
at slimsimapps.troff.MainActivity.InitializeExternal(MainActivity.java:80)
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4447)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
--------- beginning of system
Seltsamerweise wird dieser Fehler angezeigt, wenn Sie diese Zeile nicht im Manifest angegeben haben versuchen Sie, einige Dateien zu lesen, die von einigen anderen Apps geschützt sind?
– Sonne sonnig
7. September 15 um 5:42 Uhr
Auf welcher API-Ebene versuchst du das?
– Scharfe Kante
7. September 15 um 5:48 Uhr
Haben Sie versucht, das Projekt zu bereinigen? ?
– Sonne sonnig
7. September 15 um 5:50 Uhr
@sunilsunny Ich versuche nicht, geschützte Dateien zu lesen, nicht dass ich sowieso wüsste, nur ein einfacher Mediaplayer. Ja, ich habe versucht, es zu bereinigen, ich habe versucht, den Computer neu zu starten, ich habe versucht, ein signiertes APK zu generieren und es auf Google Play zu veröffentlichen und als Tester darauf zuzugreifen, ohne Erfolg ….
– Schlanker Sim
7. September 15 um 14:27 Uhr
@Scharfe Kante ; Mein AVD ist der Standard Nexus 5, api 23. Mein Modulgradle hat: compileSdkVersion 23 buildToolsVersion “23.0.0” minSdkVersion 14 targetSdkVersion 23 Also würde ich sagen 23.
– Schlanker Sim
7. September 15 um 14:29 Uhr