Я пытаюсь получить информацию о музыкальном файле в моей необработанной папке. Мне нужно получить продолжительность, название, исполнителя и т. д. Я знаю, как получить эту информацию для музыкальных файлов, хранящихся во внешнем хранилище, но я не знаю, как это сделать для музыкальных файлов в исходной папке. Помощь и ссылки приветствуются!
Android: получить информацию о музыкальном файле из необработанной папки
Ответы (4)
После поиска и использования приведенных ниже примеров мне не удалось. Решение @Jignesh Shaw дало мне исключение IllegalArgumentException, когда я установил источник MediaMetadataRetriever, а решение @Hanz Kratz смогло извлечь только продолжительность песни (как он описал)
Между тем, между двумя, однако, я был вдохновлен, чтобы придумать рабочее решение.
Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.song_name);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(this, mediaPath);
Затем информация может быть извлечена так, как заявили оба пользователя.
String sponsorTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String sponsorArtist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
//and so on...
Я понятия не имею, почему это работает отлично, но решение @Hanz Kratz не работает. Если другие люди наткнутся на эту тему, было бы неплохо, если бы вы опубликовали свои выводы. Спасибо всем!
Просто получите FileDescriptor
для необработанного ресурса, а затем используйте MediaMetadataRetriever
для извлечения метаданных, таких как продолжительность и т. д.
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
FileDescriptor fd = getResources().openRawResourceFd(R.raw.rocknroll).getFileDescriptor();
mmr.setDataSource(fd);
String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
Это отлично работает для продолжительности, но, к сожалению, у MediaMetadataRetriever
есть проблемы с исполнителем, названием,... с некоторыми файлами MP3: Android MediaMetadataRetriever возвращает нулевые значения для большинства ключей
это может помочь: -
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION};
cursor = this.managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection,null, null);
private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()){
songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" +
cursor.getString(2) + "||" + cursor.getString(3) + "||" +
cursor.getString(4) + "||" + cursor.getString(5));
}
Загрузите путь к вашему ресурсу следующим образом:
String mediaPath = Uri.parse("android.resource://<your-package-name>/raw/filename").getPath();
Убедитесь, что вы не добавляете расширение файла. Например, используйте «имя файла», а не «имя файла.mp3».
Затем вы можете получить доступ к тегам ID3 (при условии, что вы используете файлы mp3) следующим образом:
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(mediaPath);
String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
и так далее..
Надеюсь это поможет!