Esto comenzó como una pregunta general del usuario en los foros de Android. Sin embargo, se ha convertido, por necesidad, en una pregunta de programación. Aquí está mi problema.¿Cómo puedo actualizar MediaStore en Android?
Android tiene un servicio - MediaScanner - que se ejecuta en segundo plano en cualquier momento (creo) que la tarjeta SD no está montada y montada nuevamente. Este servicio recopila datos en todos los archivos multimedia de la tarjeta y proporciona una base de datos SQLite que las aplicaciones de música pueden consultar. La mayoría de las aplicaciones de música usan este servicio ya que ahorra en el consumo de batería asociado con el escaneo de la tarjeta SD.
Desde que comencé a usar Android, siempre he tenido un problema por el cual las listas de reproducción M3U sincronizadas con el dispositivo permanecen en este DB SQLite incluso después de ser eliminadas de la tarjeta SD. Ha llegado al punto en el que ahora tengo una colección de aproximadamente 40 listas de reproducción en cualquier aplicación de música que utilizo, a pesar de que solo hay alrededor de 10 archivos m3u en la tarjeta. Las listas de reproducción restantes no se reproducen y están vacías. Puedo eliminarlos manualmente eliminándolos de la aplicación de música, pero estoy cansado de hacer esto. Tiene que haber una mejor manera de eliminar estas listas de reproducción fantasmas.
Hay dos aplicaciones en Android Market: SDRescan y Music Scanner, que supuestamente hacen exactamente esto pero ninguna de ellas funciona.
Me puse a escribir mi propia aplicación para actualizar o eliminar la base de datos de MediaStore y comenzar de cero, pero no estoy llegando muy lejos. Tengo una aplicación para Android que se ejecuta el siguiente código:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
que he encontrado algunos ejemplos de este código en línea como una forma de escanear la tarjeta SD, pero no estoy teniendo ninguna suerte con él en absoluto . ¿Algun consejo?
código completo:
package com.roryok.MediaRescan;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
public class MediaRescan extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
setContentView(R.layout.main);
}
//Rescan the sdcard after copy the file
private void rescanSdcard() throws Exception{
Intent scanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory()));
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);
intentFilter.addDataScheme("file");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
}
}
Hola, ¿Usted sabe (si sendBroadcast (nueva Intención (Intent.ACTION_MEDIA_MOUNTED, Uri.parse "file: //" + Environment.getExternalStorageDirectory()))); funcionará para sdcard que son tarjetas extra de tragamonedas? en otras palabras getExternalStorageDirectory() devuelve una ruta a sdcard que es interna pero puede haber una tarjeta externa proporcionada por el fabricante? ¿Cómo se puede invocar el escáner de medios para tales tarjetas? – Ahmed
no parece haber una manera de hacer esto en este momento. ver este hilo: http://stackoverflow.com/questions/5453708/android-how-to-use-environment-getexternalstoragedirectory – roryok