在Android4.4中,可以发送广播接收者ACTION_MEDIA_SCANNER_SCAN_FILE来强制刷新媒体库,但它在5.0或6.0中不起作用。当我将mp3文件添加到手机的foler然后媒体库刷新默认时,但是当我删除mp3文件时,它无法正常刷新。
MediaScannerConnection.scanFile()
,此方法也不起作用。
ContentResolver cr = context.getContentResolver();
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
StringBuffer sb = new StringBuffer();
sb.append(MediaStore.Audio.Media.SIZE + " > " + FILTER_SIZE);
sb.append(" and "+MediaStore.Audio.Media.IS_MUSIC + " !=0");
sb.append(" and " + MediaStore.Audio.Media.DURATION + " > " + FILTER_DURATION);
Cursor cursor = cr.query(uri, proj_music, sb.toString(), null, MediaStore.Audio.Media.ARTIST_KEY);
这些是我用来查找所有mp3文件的代码。当用户删除mp3文件(不仅仅是代码,也许使用文件管理器)时,除非重启系统,否则Android媒体库无法刷新。我不想强制刷新媒体库。但ACTION_MEDIA_SCANNER_SCAN_FILE
在android>中不起作用4.4,MediaScannerConnection.scanFile()
此代码也不起作用。删除的mp3文件仍在数据库记录中。
private void refresh1() {
String path = Environment.getExternalStorageDirectory().getPath()+"/kgmusic/download/";
MediaScannerConnection.scanFile(this, new String[]{path}, new String[]{"mp3/*"}, null);
}
private void refresh2() {
mScanReceiver = new MyScanReceiver();
IntentFilter intentfilter = new IntentFilter( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intentfilter.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
intentfilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
registerReceiver(mScanReceiver, intentfilter);
String path = Environment.getExternalStorageDirectory().getPath()+"/kgmusic/download/";
Uri contentUri = Uri.fromFile(new File(path));
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,contentUri);
sendBroadcast(mediaScanIntent);
}
private class MyScanReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
System.out.println("scan start");
} else if (action.equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
System.out.println("scan finish");
}
}
}
答案 0 :(得分:0)
我也遇到过这个问题,我就这样解决了。
在API级别19(KITKAT 4.4)中不推荐使用sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
,首先我必须检查设备是否高于API级别19,如果是,则MediaScannerConnection.scanFile()
方法为真。
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
if (isKitKat) {
MediaScannerConnection.scanFile(context, new String[]{file.getPath()}, new String[]{"mp3/*"}, null);
} else {
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
}
我希望它有所帮助。