MediaPlayer setDataSource ist fehlgeschlagen mit Status = 0x80000000 für den Klingelton, der über den Dateipfad unter 2.3.4 festgelegt wurde

Titel sagt das meiste.

Meine Anwendung spielt Klingeltöne zeigte uri wie content://media/internal/audio/media/387 oder content://media/external/audio/media/1655 (für benutzerdefinierte Klingeltöne auf der SD-Karte glaube ich) mit beiden setDataSource(fileInfo) und setDataSource(mContext, Uri.parse(fileInfo)).

In jedem Fall erhielt ich die Protokolle mit Informationen über setDataSource failed.: status=0x80000000 Ausnahme für Telefone mit Android 4.x (verschiedene Versionen).

Sehen, dass der Fehler passiert nur, um Klingeltöne Spitzen von content-uri, aber nicht auf einzelne Dateien hingewiesen, die von Weg, habe ich beschlossen, Wege für Klingeltöne als auch das problem der oben genannten Handys (während immer noch mit setDataSource(mContext, Uri.parse(fileInfo)) )

Es hat allerdings begann Probleme auf Handys mit Android 2.3.4-2.3.6 (nicht auf meinen 2.3.3):

  • Ich empfangen habe einige logs mit Ausnahme: setDataSource failed.: status=0x80000000 für Dateien mit Pfaden wie /system/media/audio/ringtones/TwirlAway.ogg
  • Habe ich auch bekommen ein Protokoll über MediaPlayer.onErrorListener.onError(int what, int extra) Aufruf der Methode mit what=1 und extra=-2147483648die, was weiß ich, vorschlagen, entweder, dass die Datei fehlt oder ist beschädigt. Aber ich
    File file = new File(fileInfo);
    if (!file.exists())

check-in eine solche situation und es zurückgegeben, die Datei existiert - ist es beschädigt ist dann? Höchst unwahrscheinlich, dass für die Musik-Datei in den internen Speicher.

Zusammenfassend:

  • arbeitet mit setDataSource("content://media/internal/audio/media/52")
  • wirft Ausnahme: setDataSource failed.: status=0x80000000 für setDataSource(mContext, "/system/media/audio/ringtones/TwirlAway.ogg")

Interessant, die ersten paar Zeilen setDataSource(Context context, Uri uri, Headers headers) Methode, die aufgerufen wird, durch setDataSource(Context context, Uri uri) sind (von GrepCode Quelle für 2.3.4):

 String scheme = uri.getScheme();
     if(scheme == null || scheme.equals("file")) {
         setDataSource(uri.getPath());
         return;
     }

So, nachdem alle, es ist einfach fehl setDataSource("/system/media/audio/ringtones/TwirlAway.ogg"). Ich habe genommen die Pfade zu den Klingeltönen von uris mit:

private static String getRingtonePathFromContentUri(Context context,
        Uri contentUri) {

    String[] proj = { MediaStore.Audio.Media.DATA };
    Cursor ringtoneCursor = context.getContentResolver().query(contentUri,
            proj, null, null, null);
    ringtoneCursor.moveToFirst();
    return ringtoneCursor.getString(ringtoneCursor
            .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
}

Irgendwelche Ideen was kann das verursachen Fehler werfen? Vielleicht sind einige Probleme, die durch mangelnde lese-Berechtigungen?
Ich denke, source-code für native setDataSource(String path) - Funktion würde helfen, eine Menge, aber ich war nicht in der Lage, es zu finden.

InformationsquelleAutor der Frage Koger | 2013-05-06

Schreibe einen Kommentar