您的位置:首页 > 移动开发 > Android开发

解决 not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

2016-08-06 16:32 465 查看
背景:我们通过自己的程序更改了媒体数据库,比如说拍摄了照片,或者获取了新的音视频文件,这个时候我们想刷新媒体库,只有在重启手机系统才会去自动扫描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())));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐