2011-03-09 18 views
7

Mi aplicación muestra la lista de canciones en sdcard, y hay una opción para eliminar la canción de la tarjeta SD.Cómo actualizar la base de datos multimedia de Android

Incluso cuando se elimina la canción, la canción todavía aparece en mi lista de aplicaciones.

¿Cómo puedo actualizar la base de datos de Android y mostrar la base de datos actualizada?

Respuesta

20

Android tiene un tipo de memoria caché que realiza un seguimiento de los archivos multimedia.

Prueba esto:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

Se hace funcionar el servicio MediaScanner nuevo, que debe eliminar la canción borrado de la memoria caché del dispositivo.

También es necesario agregar este permiso para su AndroidManifest.xml:

<intent-filter> 
    <action android:name="android.intent.action.MEDIA_MOUNTED" /> 
    <data android:scheme="file" /> 
</intent-filter> 
+0

gracias por la respuesta, pero ahora estoy obteniendo una pantalla en blanco y log cat muestra 03-10 02: 24: 08.222: ERROR/MediaScannerService (401): no se pudo eliminar el archivo /data/data/com.androi d.providers.media/pause_scan Creo que el código nunca llega a la tarea onPostExecute de async cuando coloco el código en doInBackground – abhishek

+0

Ok, la pantalla en blanco puede ser porque mi tipo de conexión era Unidad de disco. Pero aún así el problema es que estoy obteniendo la lista de las canciones y no está actualizada – abhishek

+0

Okk lo tengo ... no podría haber hecho esto más feo. mientras hacía mis cosas, comenté las cosas de sendBroadcast :) pero aún tengo que ejecutar la aplicación de nuevo para ver los efectos – abhishek

1

La continuación fue probado sólo en emuladores. La solución funciona en 2.2 y 2.3, pero no en 4. En cuarto emulador de Android esta acción no hace nada con el mensaje en LogCat:

Permiso Negación: la difusión de Intención

Desafortunadamente no encontró la manera de actualizar el almacenamiento de medios Android 4 No se ha probado en Android 3.

El error también ocurre en la imagen 2.3.3 de Intel. No he comprobado en dispositivos reales.

4

Para Android antes de ICS, enviar un ACTION_MEDIA_MOUNTED emisión:

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

Para ICS y Jelly Bean, puede utilizar la API de MediaScannerConnection para escanear archivos multimedia

4

Galería de actualización que incluye Android KITKAT

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
{ 
     Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
     File f = new File("file://"+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)); 
     Uri contentUri = Uri.fromFile(f); 
     mediaScanIntent.setData(contentUri); 
     this.sendBroadcast(mediaScanIntent); 
} 
else 
{ 
     sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
} 
+0

de alguna manera esto no funcionó para mí en Android 6 (Marshmallow) ... ¿alguna idea? – Taifun

+1

Para malvaviscos, necesita obtener permiso de tiempo de ejecución para escribir en el almacenamiento del teléfono @Taifun –

+0

gracias @karthikvishnukumar, ahora estoy usando [esta solución] (http://stackoverflow.com/a/5815005/1545993) con éxito – Taifun

Cuestiones relacionadas