Это началось как общий вопрос пользователя на форумах Android.Однако это стало, по необходимости, вопросом программирования.Вот моя проблема.
В Android есть служба MediaScanner, которая работает в фоновом режиме в любое время (как мне кажется), когда SD-карта не установлена и не смонтирована.Эта служба собирает данные обо всех медиафайлах на карте и предоставляет базу данных SQLite, к которой могут обращаться музыкальные приложения.Большинство музыкальных приложений используют этот сервис, поскольку он экономит заряд батареи, связанный со сканированием SD-карты.
С тех пор как я начал использовать Android, у меня постоянно возникала проблема, из-за которой списки воспроизведения M3U, синхронизированные с устройством, остаются в этой базе данных SQLite даже после удаления с SD-карты.Я дошел до того, что теперь у меня есть коллекция из около 40 плейлистов, которые отображаются в любом музыкальном приложении, которое я использую, несмотря на то, что на карте было всего около 10 m3u файлов.Остальные плейлисты не воспроизводятся и пусты.Я могу удалить их вручную, удалив их из музыкального приложения, но мне это надоело.Должен быть лучший способ удалить эти призрачные плейлисты.
В Android Market есть два приложения - SDRescan и Music Scanner, которые предположительно делают именно это, но ни одно из них не работает.
Я приступил к написанию своего собственного приложения для обновления или удаления базы данных MediaStore и начала с нуля, но я не захожу слишком далеко.У меня есть приложение для Android, которое выполняет следующий код:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Я нашел несколько примеров этого кода в Интернете в качестве способа сканирования SD-карты, но мне не повезло сэто вообще.Какие-нибудь советы?
ПОЛНЫЙ КОД:
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())));
}
}