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

背景:我们通过自己的程序更改了媒体数据库,比如说拍摄了照片,或者获取了新的音视频文件,这个时候我们想刷新媒体库,只有在重启手机系统才会去自动扫描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())));
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值