• 安卓保存视频和图片之后相册不刷新的问题总结


    最近在做项目中遇到保存照片和视频,本地已经保存而在相册和项目中不能找到,这里做一个简单的总结

    在本地保存之后需要吧文件发送到本地或者广播的方式刷新相册

    1.照片发送到相册

    //把文件插入到系统图库
    /**
         * @param context
         * @param targetFile 要保存的照片文件
         * @param path  要保存的照片的路径地址
         */
        public static void addMediaStore(Context context, File targetFile, String path) {
            ContentResolver resolver = context.getContentResolver();
            ContentValues newValues = new ContentValues(5);
            newValues.put(MediaStore.Images.Media.DISPLAY_NAME, targetFile.getName());
            newValues.put(MediaStore.Images.Media.DATA, targetFile.getPath());
            newValues.put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis() / 1000);
            newValues.put(MediaStore.Images.Media.SIZE, targetFile.length());
            newValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
            resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, newValues);
            MediaScannerConnection.scanFile(context, new String[]{path}, null, null);//刷新相册
        }
    示例代码
       addMediaStore(chatActivity, mFile, mFile.getAbsolutePath());
    (上下文,文件,和文件的路径)
    2.视频发送到相册
    //针对非系统影音资源文件夹
    public static void insertIntoMediaStore(Context context, boolean isVideo, File saveFile, long createTime) {
            ContentResolver mContentResolver = context.getContentResolver();
            if (createTime == 0)
                createTime = System.currentTimeMillis();
            ContentValues values = new ContentValues();
            values.put(MediaStore.MediaColumns.TITLE, saveFile.getName());
            values.put(MediaStore.MediaColumns.DISPLAY_NAME, saveFile.getName());
            //值一样,但是还是用常量区分对待
            values.put(isVideo ? MediaStore.Video.VideoColumns.DATE_TAKEN
                    : MediaStore.Images.ImageColumns.DATE_TAKEN, createTime);
            values.put(MediaStore.MediaColumns.DATE_MODIFIED, System.currentTimeMillis());
            values.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis());
            if (!isVideo)
                values.put(MediaStore.Images.ImageColumns.ORIENTATION, 0);
            values.put(MediaStore.MediaColumns.DATA, saveFile.getAbsolutePath());
            values.put(MediaStore.MediaColumns.SIZE, saveFile.length());
            values.put(MediaStore.MediaColumns.MIME_TYPE, isVideo ? getVideoMimeType下面的方法/*"video/3gp"*/ : "image/jpeg");
            //插入
            mContentResolver.insert(isVideo
                    ? MediaStore.Video.Media.EXTERNAL_CONTENT_URI
                    : MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        }

    //这里是一个调用的示例代码(上下文,是否为视频,文件,时间)
     insertIntoMediaStore(chatActivity,true,dest,0);
    这个也可作为相册刷新图库

    这里需要一个获取视频格式的相关方法
    // 获取video的mine_type,暂时只支持mp4,3gp
        private static String getVideoMimeType(String path) {
            String lowerPath = path.toLowerCase();
            if (lowerPath.endsWith("mp4") || lowerPath.endsWith("mpeg4")) {
                return "video/mp4";
            } else if (lowerPath.endsWith("3gp")) {
                return "video/3gp";
            }
            return "video/mp4";
        }

    3.通用的方法(发送广播来通知相册刷新)

     /**
         * 针对系统文夹只需要扫描,不用插入内容提供者,不然会重复
         *
         * @param context  上下文
         * @param filePath 文件路径
         */private static void scanFile(Context context, String filePath) {
            if (!checkFile(filePath))
                return;
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            intent.setData(Uri.fromFile(new File(filePath)));
            context.sendBroadcast(intent);
        }
    调用示例(上下文,和文件的路径)
    scanFile(chatActivity,/*FileUtil.getCacheFilePath(video_file_name)*/ dest.getAbsolutePath());

    综上,这里都是系统的方法,根据项目稍微一做修改,可以直接调用根据自己需求稍作修改

    leileitua

     
  • 相关阅读:
    CentOS上手动配置nginx.services
    Mac安装软件时,提示文件已损坏,需要移动到废纸篓的解决方法
    Jumpserver安装部署
    Linux服务器测试带宽
    Zabbix_server执行window脚本出现中文乱码如何解决
    四行shell脚本实现Zabbix_server 的高可用
    Kubernetes Pod故障归类与排查方法
    Nginx配置location与rewrite规则教程
    ipa文件信息检查工具
    申请免费SSL证书
  • 原文地址:https://www.cnblogs.com/widgetbox/p/8968195.html
Copyright © 2020-2023  润新知