Android——将图片保存到sd卡中,系统图库检测不到?

最近在帮一个同学做毕设,是一个视频播放器项目,要求实现截图功能。正好项目集成了GSYVideoPlayer 用于视频播放,里面内置了截取视频内容的接口,正好可以使用。新建了一个文件夹后,将图片存入文件夹,图片已经保存到sd卡中,但是系统图库检测不到?

主要原因在于没有向系统发送广播,提示系统更新系统图库。

//保存图片的方法

                // 获取内置SD卡路径
                String sdCardPath = Environment.getExternalStorageDirectory().getPath();

                //如果不存在给文件夹,则创建 名为 TV 的文件夹
                String path = sdCardPath + File.separator + "TV";
                File f = new File(path);
                if(!f.exists()){
                    f.mkdir();
                }

                // 图片文件路径  截图文件使用sp中的int值自增实现,看博客有些通过当前时间命名
                int n = SpUtils.getInt(this,StaticClass.CAP,0);
                String filePath = path+ File.separator+ "screenshot"+ n +".png";


                File file = new File(filePath);
                //GSYVideoPlayer 保存截图的接口
                videoPlayer.saveFrame(file, true, new GSYVideoShotSaveListener() {
                    @Override
                    public void result(boolean success, File file) {
                        if(success == true){
                            SpUtils.putInt(VedioDeailActivity.this,StaticClass.CAP,n+1);
                            Toasty.success(VedioDeailActivity.this,"截图保存成功",Toast.LENGTH_SHORT).show();
                        }else {
                            Toasty.success(VedioDeailActivity.this,"截图保存失败",Toast.LENGTH_SHORT).show();
                        }
                    }
                });

图片保存到了系统目录:
在这里插入图片描述

但是系统相册中检测不到:
在这里插入图片描述

emmmmmmmm 坑爹 手机重启之后就能检测到了 ,无语

解决方法:
需要立刻更新系统图库以便让用户可以立刻查看到这张图片
更新系统图库的方法:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

报错:

java.lang.SecurityException:
Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=3270, uid=10071

com.ly.tv.activity.VedioDeailActivity$4.result(VedioDeailActivity.java:188)

Google将MEDIA_MOUNTED的权限提高了,于是就报了一个上面的错误。

在高版本中使用ACTION_MEDIA_SCANNER_SCAN_FILE去通知系统重新扫描文件。代码如下:

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    Intent mediaScanIntent = new Intent(
                            Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                    Uri contentUri = Uri.fromFile(mPhotoFile); //out is your output file
                    mediaScanIntent.setData(contentUri);
                    CameraActivity.this.sendBroadcast(mediaScanIntent);
                } else {
                    sendBroadcast(new Intent(
                            Intent.ACTION_MEDIA_MOUNTED,
                            Uri.parse("file://"
                                    + Environment.getExternalStorageDirectory())));
                }

成功解决问题:
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值