Android 4.4以上保存图片并通知图库

在Android 4.4之后,由于安全性增强,非系统应用直接发送媒体挂载广播会触发权限拒绝异常。本文介绍两种替代方案:一是使用MediaScannerConnection.scanFile()扫描特定文件;二是构造并发送ACTION_MEDIA_SCANNER_SCAN_FILE意图来刷新图库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前可以通过

Intent.ACTION_MEDIA_MOUNTED
发送广播。

4.4以后再这么用,就会报异常了:

SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from.pid=xxx,uid=xxx

这是因为非系统应用不允许发送系统广播了(应该算是吧?疑问

方法一:

可以采用:

MediaScannerConnection.scanFile(this, new String[]{file.getPath()}, null, new MediaScannerConnection.OnScanCompletedListener() {
    @Override
    public void onScanCompleted(String path, Uri uri) {
        Log.d("TAG","加载完成");
    }
});

注意:第二个参数,不能用目录代替。

Environment.getExternalStorageDirectory().getPath()

这样就不行。

方法二:

Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(photoFile.getAbsolutePath());
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);

参考链接:http://stackoverflow.com/questions/18624235/android-refreshing-the-gallery-after-saving-new-images

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值