2015-08-10 4 views
5

Anruf MediaMetadata.getString, haben unten Absturz in Bericht lesen, aber nicht immer Repro:MediaMetadata.getString java.lang.RuntimeException: Kann nicht Bitmap aus Paket blob

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) 

Der Code ist wie Schlag, die MediaMetadata Meta ist von der Steuerung von api MediaSessionManager.OnActiveSessionsChangedListener, sollte es von Third-Part-Musik-App erstellt werden.

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

Warum analysiert der getString die Bitmap? ist es möglich, dass die Erinnerung aus ist, wenn dies geschieht?

+1

Welches Feld lesen Sie/wie konstruieren Sie die 'MediaMetadata'? – ianhanniballake

+0

das Detail hinzufügen @ianhanniballake –

+0

irgendwelche Neuigkeiten dazu? – swalkner

Antwort

0

Ich denke, das passiert, wenn Sie große Bitmaps in das MediaMetaData Objekt mit .putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon) setzen. Dieses Bitmap wird auf dem verwendet und sollte daher ziemlich klein sein, da es serialisiert ist. Es ist tatsächlich deserialisiert jedes Mal, wenn Sie getString auf den Metadaten aufrufen.

Also die Lösung für dieses Problem wäre, nur kleine Bitmaps für METADATA_KEY_DISPLAY_ICON zu verwenden oder es überhaupt nicht zu verwenden, wenn möglich.

Verwandte Themen