2015-08-10 14 views
5

chiamata MediaMetadata.getString, hanno seguito incidente nella relazione, ma non sempre Repro:MediaMetadata.getString java.lang.RuntimeException: Impossibile leggere bitmap da pacchi 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) 

Il codice è il colpo, il MediaMetadata meta proviene dal controller di api MediaSessionManager.OnActiveSessionsChangedListener, dovrebbe essere creato dall'app di musica di terze parti.

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

Perché getString analizzerà la bitmap? è possibile che la memoria sia fuori quando succede?

+1

Che campo stai leggendo/come stai costruendo il 'MediaMetadata'? – ianhanniballake

+0

aggiungi il dettaglio @ianhanniballake –

+0

ci sono novità su questo? – swalkner

risposta

0

Penso che questo accada quando metti bitmap grandi nell'oggetto MediaMetaData con .putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon). Questo bitmap è utilizzato su MediaDescription e quindi dovrebbe essere piuttosto piccolo in quanto è serializzato. In realtà è deserializzato ogni volta che si chiama getString sui metadati.

Quindi, la soluzione a questo problema sarebbe utilizzare solo bitmap piccoli per METADATA_KEY_DISPLAY_ICON o non utilizzarlo affatto se possibile.

Problemi correlati