Cela a commencé comme une question d'utilisateur générale sur les forums Android. Cependant, il est devenu, par nécessité, une question de programmation. Voici mon problème.Comment puis-je actualiser MediaStore sur Android?
Android a un service - MediaScanner - qui fonctionne en arrière-plan à tout moment (je crois) la carte SD est non monté et re-monté. Ce service collecte des données sur tous les fichiers multimédias de la carte et fournit une base de données SQLite qui peut être interrogée par les applications musicales. La plupart des applications musicales utilisent ce service, car il permet d'économiser la batterie lors de la numérisation de la carte SD.
Depuis que j'ai commencé à utiliser Android, j'ai toujours eu un problème avec les listes de lecture M3U synchronisées avec l'appareil qui restent dans cette base de données SQLite même après avoir été supprimées de la carte SD. C'est arrivé au point où j'ai maintenant une collection d'environ 40 playlists apparaissant dans n'importe quelle application musicale que j'utilise, bien qu'il y ait seulement environ 10 fichiers m3u sur la carte. Les listes de lecture restantes ne sont pas lues et sont vides. Je peux les supprimer manuellement en les supprimant de l'application musicale, mais j'en ai marre de le faire. Il doit y avoir une meilleure façon de supprimer ces playlists fantômes.
Il existe deux applications sur l'Android Market - SDRescan et Music Scanner, qui font exactement cela, mais aucun d'entre eux ne fonctionne.
J'ai commencé à écrire ma propre application pour actualiser ou supprimer la base de données MediaStore et recommencer à zéro, mais je ne vais pas très loin. J'ai une application Android qui exécute le code suivant:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
J'ai trouvé quelques exemples de ce code en ligne comme un moyen de scanner la carte SD mais je ne suis pas avoir de chance avec ce que ce soit . Des conseils?
CODE COMPLET:
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())));
}
}
Salut, Savez-vous si sendBroadcast (nouvelle intention (Intent.ACTION_MEDIA_MOUNTED, Uri.parse ("file: //" + Environment.getExternalStorageDirectory()))); travaillera pour sdcard qui sont des cartes supplémentaires? en d'autres termes, getExternalStorageDirectory() renvoie un chemin vers la carte SD interne, mais il peut y avoir une carte externe fournie par le fabricant? Comment peut-on appeler un scanner de médias pour de telles cartes? – Ahmed
il ne semble pas être un moyen de le faire pour le moment. voir ce fil: http://stackoverflow.com/questions/5453708/android-how-to-use-environment-getexternalstoragedirectory – roryok