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();
在我的媒体播放器应用中,如果用户连续跳过歌曲,应用就会崩溃并出现以下错误
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();