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();
                        }
                    }
                });

图片保存到了系统目录:
Android——将图片保存到sd卡中,系统图库检测不到?_第1张图片

但是系统相册中检测不到:
Android——将图片保存到sd卡中,系统图库检测不到?_第2张图片

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())));
                }

成功解决问题:
Android——将图片保存到sd卡中,系统图库检测不到?_第3张图片

你可能感兴趣的:(Android)