Android 复制粘贴后的图片无法打开

问题原因是复制后的图片,通过查询 mediaprovider 数据库,获取不到,内容是没有更新的,所以无法加载打开。

getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI, null, null, null)

当复制文件到新的位置后,需要及时通知 Media 文件扫描更新。

一、通过发送系统广播

// 通过系统广播方式
String path = "/storage/emulated/0/";
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File(path));
intent.setData(uri);
context.sendBroadcast(intent);

这种方式是非即时的,系统 MediaProvider 在接收到广播后再去执行 ScanFile 动作。Android 10  ACTION_MEDIA_SCANNER_SCAN_FILE 加了 @deprecated ,过时了

 

二、使用 MediaScannerConnection 方式

        MediaScannerConnection.scanFile(context,
                new String[] {"/storage/emulated/0/"}, null,
                new MediaScannerConnection.OnScanCompletedListener() {
                    @Override
                    public void onScanCompleted(String path, Uri uri) {
                        ContentResolver cr = context.getContentResolver();
                        Cursor cursor = cr.query(uri, null, null, null, null);
                    }
                });

这种可以通过 onScanCompleted 回调及时同步数据库信息,更灵活些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值