Как извлечь обложку альбома из mp3 файла с более быстрой скоростью - PullRequest
0 голосов
/ 07 мая 2019

Я в основном создал приложение, в котором я сохраняю все данные mp3 в базе данных Realm, здесь все данные в виде строки извлекаются и сохраняются очень быстро, но когда дело доходит до извлечения и сохранения изображений в байтовом массиве, это действительно требуетдолго ждать, пока мое приложение извлечет и сохранит изображения в базе данных, что в конечном итоге приводит к задержке приложения.Ниже приведен мой код, который я сделал, пожалуйста, посмотрите.

// Этот метод предназначен для получения списков песен, в которых у меня возникают проблемы.

Примечание.попробуйте перехватить блок, здесь изображения успешно получены, но скорость очень низкая.

fun getSongList()
    {
        //query external audio
        val musicResolver = context!!.getContentResolver()
        val musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
        val musicCursor = musicResolver.query(musicUri, null, null, null, null)
        //iterate over results if valid
        if (musicCursor != null && musicCursor.moveToFirst())
        {
            //get columns
            val titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE)
            val idColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID)
            val artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST)
            val url= musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DATA)
            //add songs to list
            do
            {
                val thisId = musicCursor.getLong(idColumn)
                val thisTitle = musicCursor.getString(titleColumn)
                val thisArtist = musicCursor.getString(artistColumn)
                val thisurls = musicCursor.getString(url)
                songList!!.add(Song(thisId, thisTitle, thisArtist,thisurls))
                var byteArray:ByteArray?=null
                try
                {
                    val retriever = MediaMetadataRetriever()
                    retriever.setDataSource(thisurls)
                    val art = retriever.getEmbeddedPicture()
                    if (art != null) {
                        var bitmap=BitmapFactory.decodeByteArray(art, 0, art.size)
                        var stream =  ByteArrayOutputStream()
                        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
                         byteArray = stream.toByteArray()
                    }
                    else
                    {
                        val icon:Bitmap = BitmapFactory.decodeResource(context!!.getResources(), R.drawable.music)
                        var stream =  ByteArrayOutputStream()
                        icon.compress(Bitmap.CompressFormat.PNG, 100, stream);
                         byteArray = stream.toByteArray()
                    }
                }catch (e: Exception){
                    e.printStackTrace()
                }
                realm!!.beginTransaction()
                var songitem = realm!!.createObject(Songdetails::class.java,Companion.getPrimaryKey())
                songitem.songname = thisTitle
                songitem.songartist = thisArtist
                songitem.songurl = thisurls
                songitem.songimage = byteArray
                realm!!.commitTransaction()
            }
            while (musicCursor.moveToNext())
        }
    }

Любые предложения будут оценены!

...