从文件路径和android中的drawableID设置音频缩略图

问题描述 投票:0回答:2

最近我正在开发一个音频管理器项目,但不知道如何在 android 中设置音频缩略图。 非常感谢。

java android kotlin audio thumbnails
2个回答
0
投票

你好@bovietvidai,希望你一切顺利。在这里我将我的建议添加到您的问题中。

选项 1:

您可以使用以下代码片段创建

bitmap

Bitmap image = ThumbnailUtils.createAudioThumbnail(file, MediaStore.Images.Thumbnails.MICRO_KIND);

在上面的代码片段中

file
对象是音频文件。


选项2:

您可以使用以下代码片段使用

MediaMetadataRetriever
进行获取。

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
byte[] imgbyte;
Bitmap bitmp;
BitmapFactory.Options option =new BitmapFactory.Options();
    
mmr.setDataSource(getApplicationContext(), uri);
imgbyte = mmr.getEmbeddedPicture();
    

if (imgbyte != null) 
    bitmp = BitmapFactory.decodeByteArray(imgbyte, 0,imgbyte.length, option);

选项 3:

如果您使用

Cursor
获取媒体项,则可以使用以下代码片段使用
Cursor
进行获取。

Cursor cursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
    new String[] {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART}, 
    MediaStore.Audio.Albums._ID+ "=?", 
    new String[] {String.valueOf(albumId)}, 
    null);
    
if (cursor.moveToFirst()) {
    String albumart = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART)); 
    Bitmap bm = BitmapFactory.decodeFile(albumart);
}

我认为所有 3 个选项都适合您。


0
投票

最好的选择是使用 glide 添加,因为它不会创建后台任务问题,并且可以在出现任何错误时设置一些默认图像

val projection = arrayOf(
            MediaStore.Audio.Media.ALBUM_ID,
            MediaStore.Audio.Media.DISPLAY_NAME,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.SIZE,
            MediaStore.Audio.Media.DATA
        )

        val query = contentResolver.query(collection, projection, null, null, null)
        query?.use { cursor ->
            // Cache column indices.
            val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)
            val nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)
            val durationColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)
            val sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE)
            val dataColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)

            while (cursor.moveToNext()) {
                // Get values of columns for a given video.
                val id = cursor.getLong(idColumn)
                val name = cursor.getString(nameColumn)
                val duration = cursor.getInt(durationColumn)
                val size = cursor.getInt(sizeColumn)
                val data = cursor.getString(dataColumn)


                 val contentUri: Uri = Uri.fromFile(File(data))
                //every device works with this Uri
                val sArt = Uri.parse("content://media/external/audio/albumart")
                val musicThumbnail: Uri = ContentUris.withAppendedId(
                    sArt,
                    id
                )
Glide.with(context).load(musicThumbnail).error(R.drawable.baseline_music_note_24).into(yourImageView)
© www.soinside.com 2019 - 2024. All rights reserved.