Dies begann als eine allgemeine Benutzerfrage in Android-Foren. Es ist jedoch notwendigerweise eine Programmierfrage geworden. Hier ist mein Problem.Wie kann ich MediaStore auf Android aktualisieren?
Android hat einen Dienst - MediaScanner - der im Hintergrund läuft (ich glaube) die SD-Karte ist unmounted und re-mounted. Dieser Dienst sammelt Daten zu allen Mediendateien auf der Karte und stellt eine SQLite-DB zur Verfügung, die von Musikanwendungen abgefragt werden kann. Die meisten Musikanwendungen nutzen diesen Dienst, da sie beim Scannen der SD-Karte Batteriestrom sparen.
Seit ich Android benutze, hatte ich immer ein Problem, dass M3U-Playlists, die mit dem Gerät synchronisiert wurden, in dieser SQLite-DB bleiben, auch wenn sie von der SD-Karte gelöscht wurden. Es ist soweit gekommen, dass ich jetzt eine Sammlung von ungefähr 40 Playlists in jeder Musik-App habe, die ich benutze, obwohl nur 10 m3u Dateien auf der Karte sind. Die verbleibenden Wiedergabelisten werden nicht abgespielt und sind leer. Ich kann sie manuell entfernen, indem ich sie aus der Musik-App lösche, aber ich habe es satt, das zu tun. Es muss einen besseren Weg geben, diese Geister-Playlists zu entfernen.
Es gibt zwei Apps im Android Market - SDRescan und Music Scanner, die angeblich genau das tun, aber keiner von beiden funktioniert.
Ich habe angefangen, meine eigene App zu schreiben, um die MediaStore-Datenbank zu aktualisieren oder zu löschen und von vorne anzufangen, aber ich komme nicht sehr weit. Ich habe eine Android-App bekam, die den folgenden Code ausgeführt wird:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
ich ein paar Beispiele dieser Code online als eine Möglichkeit gefunden haben, die SD-Karte zu scannen, aber ich habe kein Glück mit ihm überhaupt . Irgendwelche Tipps?
FULL CODE:
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())));
}
}
Hallo, Wissen Sie, ob sendBroadcast (neu Intent (Intent.ACTION_MEDIA_MOUNTED, Uri.parse ("file: //" + Environment.getExternalStorageDirectory()))); funktioniert für SD-Karte, die extra Slot-Karten sind? Mit anderen Worten: getExternalStorageDirectory() gibt einen Pfad zur SD-Karte zurück, der intern ist, aber möglicherweise eine vom Hersteller bereitgestellte externe Karte? Wie kann man Medienscanner für solche Karten aufrufen? – Ahmed
scheint es im Moment keine Möglichkeit zu geben, dies zu tun. Sieh diesen Thread: http://StackOverflow.com/Questions/5453708/android-how-to-use-environment-getexternalstorageverzeichnis – roryok