背景:我们通过自己的程序更改了媒体数据库,比如说拍摄了照片,或者获取了新的音视频文件,这个时候我们想刷新媒体库,只有在重启手机系统才会去自动扫描SD卡,而我们想通过程序去实现。
在安卓4.4之前,我们可以发送这样一个广播android.intent.action.MEDIA_MOUNTED
但是,4.4+之后出于安全的考虑,系统禁止我们这个样,会抛异常not allowed to send broadcast android.intent.action.MEDIA_MOUNTED
看一下源代码core/rest/AndroidManifest.xml 你会发现,android.intent.action.MEDIA_MOUNTED
成为了protected,意味着只有系统才能发广播。
请用如下代码代替
MediaScannerConnection.scanFile(this, new String[] {
file.getAbsolutePath()},
null, new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri)
{
}
});
其中第二个参数是一个字符串数组,代表打算扫描的文件。
如果要进行版本适配,请使用如下代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(out); \\out is your output file
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
} else {
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
}