2010-03-24 11 views
6

Voglio aggiornare/inserire una nuova immagine per un album in MediaStore ma io non riesco a farlo funzionare ..Come posso aggiornare il percorso artistico dell'album usando contentResolver?

Questo è il mio codice:

public void updateAlbumImage(String path, int albumID) { 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.Audio.Albums.ALBUM_ART, path); 

    int n = contentResolver.update(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, values, MediaStore.Audio.Albums.ALBUM_ID + "=" + albumID, null); 
    Log.e(TAG, "updateAlbumImage(" + path + ", " + albumID + "): " + n); 
} 

L'errore è:

03-24 03:09:46.323: ERROR/AndroidRuntime(5319): java.lang.UnsupportedOperationException: Unknown or unsupported URL: content://media/external/audio/albums 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:131) 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:111) 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at android.content.ContentProviderProxy.update(ContentProviderNative.java:405) 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at android.content.ContentResolver.update(ContentResolver.java:554) 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at com.liviu.app.smpp.managers.AudioManager.updateAlbumImage(AudioManager.java:563) 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at com.liviu.app.smpp.ShowAlbumsActivity.saveImageFile(ShowAlbumsActivity.java:375) 
03-24 03:09:46.323: ERROR/AndroidRuntime(5319):  at com.liviu.app.smpp.ShowAlbumsActivity.onClick(ShowAlbumsActivity.java:350) 

Grazie!

risposta

9

vedi questo post:

Android set Album Thumbnail

Il bit che serve è qui:

ContentResolver res = context.getContentResolver(); 
    Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id); 
    if (uri != null) { 
     InputStream in = null; 
     try { 
      in = res.openInputStream(uri); 
      return BitmapFactory.decodeStream(in, null, sBitmapOptions); 
     } catch (FileNotFoundException ex) { 
      // The album art thumbnail does not actually exist. Maybe the user deleted it, or 
      // maybe it never existed to begin with. 
      Bitmap bm = getArtworkFromFile(context, null, album_id); 
      if (bm != null) { 
       // Put the newly found artwork in the database. 
       // Note that this shouldn't be done for the "unknown" album, 
       // but if this method is called correctly, that won't happen. 

       // first write it somewhere 
       String file = Environment.getExternalStorageDirectory() 
        + "/albumthumbs/" + String.valueOf(System.currentTimeMillis()); 
       if (ensureFileExists(file)) { 
        try { 
         OutputStream outstream = new FileOutputStream(file); 
         if (bm.getConfig() == null) { 
          bm = bm.copy(Bitmap.Config.RGB_565, false); 
          if (bm == null) { 
           return getDefaultArtwork(context); 
          } 
         } 
         boolean success = bm.compress(Bitmap.CompressFormat.JPEG, 75, outstream); 
         outstream.close(); 
         if (success) { 
          ContentValues values = new ContentValues(); 
          values.put("album_id", album_id); 
          values.put("_data", file); 
          Uri newuri = res.insert(sArtworkUri, values); 
          if (newuri == null) { 
           // Failed to insert in to the database. The most likely 
           // cause of this is that the item already existed in the 
           // database, and the most likely cause of that is that 
           // the album was scanned before, but the user deleted the 
           // album art from the sd card. 
           // We can ignore that case here, since the media provider 
           // will regenerate the album art for those entries when 
           // it detects this. 
           success = false; 
          } 
         } 
         if (!success) { 
          File f = new File(file); 
          f.delete(); 
         } 
        } catch (FileNotFoundException e) { 
         Log.e(TAG, "error creating file", e); 
        } catch (IOException e) { 
         Log.e(TAG, "error creating file", e); 
        } 
       } 
      } else { 
       bm = getDefaultArtwork(context); 
      } 
      return bm; 
     } finally { 
      try { 
       if (in != null) { 
        in.close(); 
       } 
      } catch (IOException ex) { 
      } 
     } 
    } 
+0

Grazie, funziona davvero :) !. Ci scusiamo per il ritardo nell'accettare questa risposta. Quando ho postato la domanda, nessuno ha risposto, quindi ho creato una nuova colonna in un database separato, ma ora ho lo stesso problema, cerco una soluzione e ho visto la tua risposta. Grazie ancora. –

+0

Penso che questo codice sia per inserire una riga. Che ne dici di aggiornare una riga che ho appena inserito? –

+0

Utilizzare questo codice prima di questo codice se si desidera aggiornare e non solo inserire: contentResolver.delete ( ContentUris.withAppendedId (sArtworkUri, song.getAlbumID()), null, null); –

Problemi correlati