RemoteControlClient putbitmap() 使应用程序崩溃

RemoteControlClient putbitmap() crashes the app

在我的媒体播放器应用中,如果用户连续跳过歌曲,应用就会崩溃并出现以下错误

android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:923)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:145)  at android.app.ActivityThread.main(ActivityThread.java:5951)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)  Caused by: java.lang.IllegalStateException: Can't parcel a recycled bitmap at android.graphics.Bitmap.checkRecycled(Bitmap.java:393) at android.graphics.Bitmap.writeToParcel(Bitmap.java:1669) at android.os.Parcel.writeParcelable(Parcel.java:1357) at android.os.Parcel.writeValue(Parcel.java:1262) at android.os.Parcel.writeArrayMapInternal(Parcel.java:638) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1313) at android.os.Bundle.writeToParcel(Bundle.java:1096) at android.os.Parcel.writeBundle(Parcel.java:663) at android.media.MediaMetadata.writeToParcel(MediaMetadata.java:408) at android.media.session.ISession$Stub$Proxy.setMetadata(ISession.java:426) at android.media.session.MediaSession.setMetadata(MediaSession.java:411) at android.media.RemoteControlClient$MetadataEditor.apply(RemoteControlClient.java:591) at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.xxxxxxxxx.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();

如果我删除 .putBitmap( RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK, mAlbumArt.getBitmap()) 这个问题正在解决 fixed.I 已经尝试了与 Can't parcel a recycled bitmap 相关的所有问题这里?

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

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();