MediaMetadata.getString方法 java.lang.RuntimeException:无法从包裹块中读取位图

6
调用MediaMetadata.getString时,报告中出现以下崩溃,但并非总是可重现:
 java.lang.RuntimeException: Could not read bitmap from parcel blob.
    at android.graphics.Bitmap.nativeCreateFromParcel(Native Method)
    at android.graphics.Bitmap.access$000(Bitmap.java:32)
    at android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1477)
    at android.graphics.Bitmap$1.createFromParcel(Bitmap.java:1469)
    at android.os.Parcel.readParcelable(Parcel.java:2246)
    at android.os.Parcel.readValue(Parcel.java:2146)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
    at android.os.BaseBundle.getCharSequence(BaseBundle.java:953)
    at android.os.Bundle.getCharSequence(Bundle.java:716)
    at android.media.MediaMetadata.getText(MediaMetadata.java:334)
    at android.media.MediaMetadata.getString(MediaMetadata.java:347)

以下是代码,MediaMetadata meta来自于api MediaSessionManager.OnActiveSessionsChangedListener的控制器,它应该由第三方音乐应用程序创建。

    meta.getString(MediaMetadata.METADATA_KEY_ALBUM_ARTIST);
    meta.getString(MediaMetadata.METADATA_KEY_ARTIST);            
    meta.getString(MediaMetadata.METADATA_KEY_AUTHOR);         
    meta.getBitmap(MediaMetadata.METADATA_KEY_ART);
    meta.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART);            
    meta.getString(MediaMetadata.METADATA_KEY_ALBUM);
    meta.getString(MediaMetadata.METADATA_KEY_TITLE);

为什么getString会解析位图?这种情况可能是内存不足导致的吗?

1
你正在读取哪个字段/你是如何构建MediaMetadata的? - ianhanniballake
添加细节 @ianhanniballake - Sarah Ma
这方面有任何消息吗? - swalkner
@SarahMa,你能修复一下吗?我也遇到了同样的问题。 - msevgi
1个回答

0

我认为这种情况发生在你将大位图放入MediaMetaData对象中,使用.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon)。该位图用于MediaDescription,因此它应该非常小,因为它是序列化的。每次调用getString时,它实际上都会被反序列化。

因此,解决此问题的方法是仅使用小位图作为METADATA_KEY_DISPLAY_ICON,或者尽可能不使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接