Android RemoteControlClient putbitmap()使应用程序崩溃

Android RemoteControlClient putbitmap()使应用程序崩溃,android,metadata,android-music-player,Android,Metadata,Android Music Player,在我的mediaplayer应用程序中,如果用户连续跳过歌曲,应用程序将崩溃,并出现以下错误 LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:923) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:

在我的mediaplayer应用程序中,如果用户连续跳过歌曲,应用程序将崩溃,并出现以下错误

LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:923) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:145) 位于android.app.ActivityThread.main(ActivityThread.java:5951) 位于java.lang.reflect.Method.invoke(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1388) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 原因:java.lang.IllegalStateException:无法打包回收的位图 在android.graphics.Bitmap.checkRecycled(Bitmap.java:393) 位于android.graphics.Bitmap.writeToParcel(Bitmap.java:1669) 在android.os.Parcel.writeParcelable上(Parcel.java:1357) 位于android.os.Parcel.writeValue(Parcel.java:1262) 位于android.os.Parcel.writeArrayMapInternal(Parcel.java:638) 位于android.os.BaseBundle.WriteToParceliner(BaseBundle.java:1313) 位于android.os.Bundle.writeToParcel(Bundle.java:1096) 位于android.os.Parcel.writeBundle(Parcel.java:663) 在android.media.MediaMetadata.writeToParcel(MediaMetadata.java:408) 在android.media.session.ISession$Stub$Proxy.setMetadata(ISession.java:426)中 在android.media.session.MediaSession.setMetadata(MediaSession.java:411)中 在android.media.RemoteControlClient$MetadataEditor.apply上(RemoteControlClient.java:591) 位于java.lang.reflect.Method.invoke(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:372) 位于com.xxxxxxxx.musicplayer.RemoteControlClientCompat$MetadataEditorCompat.apply(RemoteControlClientCompat.java:389)

下面是编写元数据信息的代码块

BitmapDrawable mAlbumArt = Myclass.getArtwork(this, mMusicPath, true);
        if (mAlbumArt.equals(null))
            mAlbumArt = (BitmapDrawable) (this.getResources().getDrawable(R.drawable.sym_albumart_noimage));


mRemoteControlClientCompat.editMetadata(true)

.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, getArtistName())
                .putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, getArtistName())
                .putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, getAlbumName())
                .putString(MediaMetadataRetriever.METADATA_KEY_TITLE, getTrackName())
                .putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, getDuration())
                .putLong(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER, getSongID())
                .putBitmap(
                        RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK,
                        mAlbumArt.getBitmap())
                .apply();
如果我删除 .putbramp( RemoteControlClientCompat.MetadataEditorCompat.METADATA\u KEY\u ARTWORK,
mAlbumArt.getBitmap())
此问题正在得到解决。我已经尝试了所有与无法打包回收的位图相关的问题这里有什么问题?

在写入元数据之前检查位图是否回收

if(!mAlbumArt.getBitmap().isRecycled())
        mRemoteControlClientCompat.editMetadata(true)
                .putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, getArtistName())
                .putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, getArtistName())
                .putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, getAlbumName())
                .putString(MediaMetadataRetriever.METADATA_KEY_TITLE, getTrackName())
                .putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, getDuration())
                .putLong(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER, getSongID())
                .putBitmap(
                        RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK,
                        mAlbumArt.getBitmap())
                .apply();