Ich erstelle einen Media Player mit ReactNative. Um eine solche App zu erstellen, musste ich ein Modul exportieren, das ich für das Abrufen von Musik-Metadaten wie Album, Künstler usw. sowie den Dateipfad erstellt hatte.MediaMetadataRetriever.setDataSource (systemeigene Methode) verursacht RuntimeException: status = 0xFFFFFFEA
Der obige Code funktioniert perfekt jdk1.8.0_112 verwenden, aber da ich zu jdk1.8.0_144 aktualisiert Arbeits Es gestoppt.
In diesem Beispiel suche ich nicht nach nicht null, nicht leer, Länge> 0, etc, aber ich wirklich in der Originalversion.
try {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource("Path to the file"); // /storage/337C-1C15/Music/Edguy/Speedhoven.mp3
} catch (RuntimeException ex) {
// java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFEA
}
Ich habe zwei Probleme. Auf der einen Seite bin ich kein großartiger Android-Entwickler, also ist es schwierig, einige Hinweise zu bekommen. Auf der anderen Seite liefert der Fehler eine gute Beschreibung.
Gerade falls einige von euch hatten eine bessere Art und Weise zu erreichen, was ich versuchte, ich den ganzen Code hier links:
@ReactMethod
public void getAll(Callback errorCallback, Callback successCallback){
ContentResolver musicResolver = this.getCurrentActivity().getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
if (musicCursor != null && musicCursor.moveToFirst()) {
WritableArray jsonArray = new WritableNativeArray();
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
WritableMap items = new WritableNativeMap();
int titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);
try {
do {
items = new WritableNativeMap();
byte[] art;
long thisId = musicCursor.getLong(idColumn);
String thisPath = musicCursor.getString(musicCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
String duration = musicCursor.getString(musicCursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
if(thisPath != null && thisPath != "" && thisPath.endsWith(".mp3")) {
mmr.setDataSource(thisPath);
String album = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
String artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String title = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String genre = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
String encoded = "";
String encodedImage = "";
art = mmr.getEmbeddedPicture();
if (album == null) {
album = thisArtist;
}
if (artist == null) {
artist = thisArtist;
}
if (title == null) {
title = thisTitle;
}
if (art != null) {
Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length);
if(songImage != null){
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
songImage.compress(Bitmap.CompressFormat.JPEG, 60, byteArrayOutputStream);
byte[] byteArray = byteArrayOutputStream.toByteArray();
encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
String pathtoImg = "";
byte[] imageByte = Base64.decode(encodedImage, Base64.DEFAULT);
try {
pathtoImg = Environment.getExternalStorageDirectory() + "/" + thisId + ".jpg";
File filePath = new File(pathtoImg);
FileOutputStream fos = new FileOutputStream(filePath, true);
encoded = pathtoImg;
fos.write(imageByte);
fos.flush();
fos.close();
} catch (FileNotFoundException fnfe) {
errorCallback.invoke(fnfe.getMessage());
} catch (IOException ioe) {
errorCallback.invoke(ioe.getMessage());
}
}
}
String str = String.valueOf(thisId);
items.putString("id", str);
items.putString("album", album);
items.putString("artist", artist);
items.putString("title", title);
items.putString("genre", genre);
if (encoded == "") {
items.putString("cover", "");
} else {
items.putString("cover", "file://" + encoded);
}
items.putString("duration", duration);
items.putString("path", thisPath);
jsonArray.pushMap(items);
}
} while (musicCursor.moveToNext());
successCallback.invoke(jsonArray);
mmr.release();
} catch (RuntimeException e) {
errorCallback.invoke(e.toString());
mmr.release();
} catch (Exception e) {
errorCallback.invoke(e.getMessage());
mmr.release();
}
}
}
Natürlich habe ich genommen bereits einen Blick auf:
Bitte fügen logcat – bukkojot
Ja, sicher. Wie kann ich es bekommen? –