Zavolajte na MediaMetadata.getString, v prehľade máte zlyhanie, ale nie vždy opakovanie:
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)
Tento kód je funkčný, meta MediaMetadata je z radiča api MediaSessionManager.OnActiveSessionsChangedListener, mal by byť vytvorený pomocou hudobnej aplikácie tretej časti.
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);
Prečo getString bude analyzovať bitmapu? je možné, že v takomto prípade je pamäť vyčerpaná?
odpovede:
0 pre odpoveď č. 1Myslím, že sa to stane, keď vložíte veľké bitmapy MediaMetaData
objekt s .putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon)
, Táto bitová mapa sa používa na MediaDescription
a preto by mal byť dosť malý, pretože je serializovaný. Je to vlastne deserializované zakaždým, keď zavoláte getString
o metaúdajoch.
Riešením tohto problému by preto bolo použitie iba malých bitových máp pre METADATA_KEY_DISPLAY_ICON
alebo ak je to možné, nepoužívajte ho vôbec.