Ce qui a commencé comme un utilisateur à la question sur les forums Android. Cependant, il est devenu, par nécessité, une question de programmation. Voici mon problème.
Android dispose d'un service - MediaScanner - qui s'exécute en arrière-plan à tout moment (je crois) la carte SD est non monté et re-monté. Ce service recueille des données sur tous les fichiers multimédia sur la carte, et fournit un DB SQLite qui peut être interrogée par les applications de musique. La plupart des applications de musique utiliser ce service car il permet d'économiser la batterie-vidange associés à la numérisation de la carte SD.
Depuis que j'ai commencé à utiliser android, j'ai toujours eu un problème selon lequel M3U playlists synchronisée à l'appareil de rester dans ce SQLite DB, même après avoir été supprimés de la Carte SD. Il est arrivé au point où maintenant, j'ai une collection d'environ 40 sélections en montrant dans toute la musique app que j'utilise, bien que seulement environ 10 m3u fichiers sur la carte. Le reste des listes de lecture ne jouent pas, et sont vides. Je peux les supprimer manuellement en les supprimant de l'application musique, mais je suis malade de le faire. Il y a une meilleure façon de supprimer ces fantômes des listes de lecture.
Il y a deux applications sur l'Android Market - SDRescan et de la Musique du Scanner, qui soi-disant faire exactement cela, mais aucun d'eux de travailler.
J'ai décidé d'écrire mon propre application pour actualiser ou supprimer le MediaStore base de données et commencer à partir de zéro, mais je ne suis 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 scan de la Carte SD, mais je ne suis pas du tout avoir de la chance avec elle que ce soit. Des conseils à donner?
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())));
}
}