android11 存储机制变化之保存图片至图库代码案例

   日期:2020-11-10     浏览:1166    评论:0    
核心提示:1.首先附上一份android 11存储机制变动简介官方文档供参考https://developer.android.google.cn/preview/privacy/storage#java2.参考源码实现的在android11中保存图片到图库的代码:public void saveImageToGallery2(Context context){ Long mImageTime = System.currentTimeMillis(); String imageDate

1.首先附上一份android 11存储机制变动简介官方文档供参考

https://developer.android.google.cn/preview/privacy/storage#java

2.参考源码实现的在android11中保存图片到图库的代码:

public void saveImageToGallery2(Context context){
    Long mImageTime = System.currentTimeMillis();
    String imageDate = new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date(mImageTime));
    String SCREENSHOT_FILE_NAME_TEMPLATE = "Screenshot_%s.png";//图片名称,以"Screenshot"+时间戳命名
    String mImageFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, imageDate);

    Resources res=getResources();
    Bitmap image =BitmapFactory.decodeResource(res, R.drawable.splash_bg);

    final ContentValues values = new ContentValues();
    values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES
            + File.separator + "dh"); //Environment.DIRECTORY_SCREENSHOTS:截图,图库中显示的文件夹名。"dh"
    values.put(MediaStore.MediaColumns.DISPLAY_NAME, mImageFileName);
    values.put(MediaStore.MediaColumns.MIME_TYPE, "image/png");
    values.put(MediaStore.MediaColumns.DATE_ADDED, mImageTime / 1000);
    values.put(MediaStore.MediaColumns.DATE_MODIFIED, mImageTime / 1000);
    values.put(MediaStore.MediaColumns.DATE_EXPIRES, (mImageTime + DateUtils.DAY_IN_MILLIS) / 1000);
    values.put(MediaStore.MediaColumns.IS_PENDING, 1);

    ContentResolver resolver = context.getContentResolver();
    final Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    try {
        // First, write the actual data for our screenshot
        try (OutputStream out = resolver.openOutputStream(uri)) {
            if (!image.compress(Bitmap.CompressFormat.PNG, 100, out)) {
                throw new IOException("Failed to compress");
            }
        }
        // Everything went well above, publish it!
        values.clear();
        values.put(MediaStore.MediaColumns.IS_PENDING, 0);
        values.putNull(MediaStore.MediaColumns.DATE_EXPIRES);
        resolver.update(uri, values, null, null);
    }catch (IOException e){
        resolver.delete(uri, null);
        Log.d("Exception",e.toString());
    }
}

 

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服