Добавление обложки к загруженному mp3 на Android

Как программно добавить обложку (обложку альбома) к скачанному mp3?

Я позволяю моему приложению загружать mp3-файл через DownloadManager из Android APIS, как показано ниже:

private void startDownload(){
    Uri uri = Uri.parse(BASE_URL+DOWNLOAD+mp3+".mp3");

    filename = title+".mp3";

    Request request = new DownloadManager.Request(uri)
    .setDestinationInExternalPublicDir(MUSIC_PATH, filename);

    DOWNLOAD_MANAGER.enqueue(request);
}

Можно ли к скачанному мп3 файлу добавить обложку, чтобы мп3 плеер на телефоне показывал картинку во время проигрывания песни?


person sn0ep    schedule 16.07.2012    source источник
comment
В эти файлы MP3 встроена обложка? Если это так, то я думаю, что приложение музыкального/медиаплеера сможет разобраться с этим самостоятельно. Если обложка не встроена, вам придется: 1) получить откуда-то файл изображения обложки, 2) вставьте его в свой MP3-файл.   -  person tiguchi    schedule 16.07.2012


Ответы (1)


Загрузите этот JAR-файл MyID3_for_android и добавьте его в путь сборки вашего проекта. вот пример кода того, как вы можете изменить обложку

        File src = new File("filepath");
        MusicMetadataSet src_set = new MyID3().read(src);

        File img = (new File("imagePath"));


        Vector<ImageData> fileList = new Vector<ImageData>();
        ImageData data = new ImageData(readFile(img), "", "", 3);
        fileList.add(data);

        MusicMetadata metadata =  (MusicMetadata) src_set.getSimplified();
        metadata.setPictureList(fileList);

        File dst = new File("destinationPath");

        new MyID3().write(src, dst, src_set, metadata); 

Вам также понадобится jakarta Regex jar.

readFile - это только функция для получения byte[] из файла

public static byte[] readFile (File file) throws IOException {
    // Open file
    RandomAccessFile f = new RandomAccessFile(file, "r");

    try {
        // Get and check length
        long longlength = f.length();
        int length = (int) longlength;
        if (length != longlength) throw new IOException("File size >= 2 GB");

        // Read file and return data
        byte[] data = new byte[length];
        f.readFully(data);
        return data;
    }
    finally {
        f.close();
    }
}

Получил от stackOverflow, не знаю от кого :)

person Rany Ishak    schedule 19.07.2012
comment
Спасибо за пример. Я не мог найти ответ на это. Я бы дал вам несколько голосов, если бы мог. - person Mridang Agarwalla; 14.01.2013
comment
Сделал то же самое, но не смог воспроизвести аудиофайл. Есть идеи, почему? - person Iram Bukhari; 10.05.2014