2017-04-13 5 views
-1

Dans mon application MediaPlayer, si l'utilisateur continue sauter les chansons les application se bloque et je suis obtiens l'erreur suivanteRemoteControlClient putbitmap() bloque l'application

android.app.LoadedApk $ ReceiverDispatcher $ Args.run (LoadedApk .java: 923) à android.os.Handler.handleCallback (Handler.java:739) à android.os.Handler.dispatchMessage (Handler.java:95) à android.os.Looper.loop (Looper.java : 145) at android.app.ActivityThread.main (ActivityThread.java:5951) à java.lang.reflect.Method.invoke (Méthode native) à java.lang.reflect.Method.invoke (Method.java:372) à com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit. java: 1388) à com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1183) causés par: java.lang.IllegalStateException: ne peut pas morceler un bitmap recyclé à android.graphics.Bitmap .checkRecycled (Bitmap.java:393) à android.graphics.Bitmap.writeToParcel (Bitmap.java:1669) à android.os.Parcel.writeParcelable (Parcel.java:1357) à android.os.Parcel.writeValue (Parcel.java:1262) à android.os.Parcel.writeArrayMapInternal (Parcel.java:638) à android.os.BaseBundle.writeToParcelInner (BaseBundle.java:1313) à androïde .os.Bundle.writeToParcel (Bundle.java:1096) à android.os.Parcel.writeBundle (Parcel.java:663) à android.media.MediaMetadata.writeToParcel (MediaMetadata.java:408) at android.media .session.ISession $ Stub $ Proxy.setMetadata (ISession.java:426) à l'adresse android.media.session.MediaSession.setMetadata (MediaSession.java:411) at android.media.RemoteControlClient $ Met adataEditor.apply (RemoteControlClient.java:591) à java.lang.reflect.Method.invoke (méthode native) à java.lang.reflect.Method.invoke (Method.java:372) à com.xxxxxxxxx.musicplayer .RemoteControlClientCompat $ MetadataEditorCompat.apply (RemoteControlClientCompat.java:389)

est ici le bloc de code qui écrire des métadonnées

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

Si je retire .putBitmap ( RemoteControlClientCompat.MetadataEditorCompat.METADATA_KEY_ARTWORK, mAlbumArt.getBitmap()) cette question se fixed.I've a essayé toutes les questions liées à la ne peut pas morceler un bitmap recyclé Qu'est-ce que je fais mal ici?

Répondre

1

Vérifiez si le bitmap a été recyclé ou non avant d'écrire dans les métadonnées.

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