Android实现保存图片并刷新系统图库图片一直在最前面
2017-10-27 15:14
866 查看
最近在做运动手环项目,有一个功能要实现保存二维码,用户在微信扫一扫直接扫描二维码。其实功能很简单,就是保存文件到本地。
保存图片到本地代码我就不写了,关键是保存到本地图片,也要加入在系统相册,并且要在微信扫一扫立马能找到,所以图片保存以后一定要刷新系统相册,网上有很多参考,给个链接http://blog.csdn.net/a751608624/article/details/50728336
其实以上代码确实能实现保存图片到本地,并且能刷新相册图库,用户打开手机相册能看到保存的的图片。
但是我的项目是保存二维码,用户打开微信去扫一扫,打开扫一扫的时候,微信会打开本地图片,但是刚刚保存的二维码图片不在最前面,只有选择所有图片,在其他目录才能发现刚才保存的二维码,这对于用户无疑体验很不好的。于是百度找解决方案,有网友说保存图片带上当前时间即可,相册图片可以根据时间排名,于是测试不。
后来发现通过调用MediaStore插入图片可以解决此问题,这样实现每次保存的图片,在微信打开扫一扫时,图片都在第一个,这样对于用户体验就很好了。以下贴出代码
在此还一个小问题,就是调用
当图片保存成功时再次保存调用insert,就会返回一个null的uri,于是做了一个处理,当图片不存在时在保存,这样就解决了uri是null 的问题。
保存图片到本地代码我就不写了,关键是保存到本地图片,也要加入在系统相册,并且要在微信扫一扫立马能找到,所以图片保存以后一定要刷新系统相册,网上有很多参考,给个链接http://blog.csdn.net/a751608624/article/details/50728336
MediaStore.Images.Media.insertImage(getContentResolver(), "image path", "title", "description");//插入图库
String path = SAVE_REAL_PATH + fileName; sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse(path)));//更新图库
其实以上代码确实能实现保存图片到本地,并且能刷新相册图库,用户打开手机相册能看到保存的的图片。
但是我的项目是保存二维码,用户打开微信去扫一扫,打开扫一扫的时候,微信会打开本地图片,但是刚刚保存的二维码图片不在最前面,只有选择所有图片,在其他目录才能发现刚才保存的二维码,这对于用户无疑体验很不好的。于是百度找解决方案,有网友说保存图片带上当前时间即可,相册图片可以根据时间排名,于是测试不。
后来发现通过调用MediaStore插入图片可以解决此问题,这样实现每次保存的图片,在微信打开扫一扫时,图片都在第一个,这样对于用户体验就很好了。以下贴出代码
String dirName = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + File.separator + "jwd"; File fileDir = new File(dirName); if (!fileDir.exists()) { fileDir.mkdir(); } // 系统时间 long mImageTime = System.currentTimeMillis(); long dateSeconds = mImageTime / 1000; // 文件名 String mImageFileName = "wechat_" + mac + ".png"; // 文件路径 String mImageFilePath = dirName + File.separator + mImageFileName; File file = new File(mImageFilePath); if (file.exists()) { showTextDialog("二维码已保存"); mDialogHandler.sendEmptyMessageDelayed(1, 1000); return; } //获取截屏 View view = this.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); Bitmap bitmap = view.getDrawingCache(); int mImageWidth = bitmap.getWidth(); int mImageHeight = bitmap.getHeight(); // 保存截屏到系统MediaStore ContentValues values = new ContentValues(); ContentResolver resolver = mContext.getContentResolver(); values.put(MediaStore.Images.ImageColumns.DATA, mImageFilePath); values.put(MediaStore.Images.ImageColumns.TITLE, mImageFileName); values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, mImageFileName); values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, mImageTime); values.put(MediaStore.Images.ImageColumns.DATE_ADDED, dateSeconds); values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, dateSeconds); values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/png"); values.put(MediaStore.Images.ImageColumns.WIDTH, mImageWidth); values.put(MediaStore.Images.ImageColumns.HEIGHT, mImageHeight); Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); try { OutputStream out = resolver.openOutputStream(uri); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);// bitmap转换成输出流,写入文件 out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } // update file size in the database values.clear(); values.put(MediaStore.Images.ImageColumns.SIZE, new File(mImageFilePath).length()); resolver.update(uri, values, null, null); showTextDialog("二维码保存成功"); mDialogHandler.sendEmptyMessageDelayed(1, 1000);
在此还一个小问题,就是调用
resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);//保存图片信息到系统MediaStore
当图片保存成功时再次保存调用insert,就会返回一个null的uri,于是做了一个处理,当图片不存在时在保存,这样就解决了uri是null 的问题。
相关文章推荐
- Android 保存图片到系统图库 -- 利用 “系统保存屏幕截图” 的方法实现
- Android保存图片到系统图库并通知系统相册刷新
- Android编程实现保存图片到系统图库的方法示例
- Android保存图片到系统图库
- Android保存图片到系统图库
- 调用系统相机 图库 截图功能。实现大图片裁剪保存
- Android保存图片到系统图库
- android 拍照的图片保存到系统图库
- android7.1 保存图片到系统图库
- Android保存图片到系统图库 或者指定文件夹
- Android 调用系统相机、图库 ,取图片并裁剪、保存sd卡
- Android保存图片到系统图库
- 【Android】 保存图片到系统图库, 并立即显示在图库中
- Android保存图片到系统图库
- android实现从系统图库中选择图片,设置到界面上的ImageView控件上。
- 主动通知Android系统图库进行更新(图片保存到手机中,立即在图库中显示1)
- Android保存图片到系统图库
- Android保存图片到系统图库
- Android保存图片到系统图库
- Android保存图片(可能屏幕截图的)到系统图库