以前写过生成自定义二维码的两篇文章:《Android生成自定义二维码》《Android生成二维码–拍照或从相册选取图片》,下面就介绍一下Android应用内如何保存以及分享二维码图片。html
保存图片android
Adnroid中保存图片能够直接调用系统提供的插入图库的方法,或者指定存储路径。插入图片后须要刷新系统图库。git
1.调用系统提供的插入图库方法github
//插入到系统图库
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", "");
刷新图库微信
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
这个方法没法指定保存路径和图片名,并且刷新将扫描整个SD卡,用户体验很差,因此看下面这个方法。app
2.指定存储路径,更新图库spa
//发送广播通知系统图库刷新数据
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
这里的uri是保存图片的路径,直接更新指定的路径将不会扫描整个SD卡,节省资源的同时也能自定义保存路径和文件名。因此须要先将图片保存到指定路径下,利用文件的IO流保存便可,以下:3d
/** * 保存图片到指定路径 * * @param context * @param bitmap 要保存的图片 * @param fileName 自定义图片名称 * @return
*/
public static boolean saveImageToGallery(Context context, Bitmap bitmap, String fileName) { // 保存图片至指定路径
String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "qrcode"; File appDir = new File(storePath); if (!appDir.exists()) { appDir.mkdir(); } File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); //经过io流的方式来压缩保存图片(80表明压缩20%)
boolean isSuccess = bitmap.compress(Bitmap.CompressFormat.JPEG, 80, fos); fos.flush(); fos.close(); //发送广播通知系统图库刷新数据
Uri uri = Uri.fromFile(file); context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); if (isSuccess) { return true; } else { return false; } } catch (IOException e) { e.printStackTrace(); } return false; }
最后别忘了加入相应的权限,这里涉及了敏感权限WRITE_EXTERNAL_STORAGE,须要动态申请,方法前面文章已经介绍过,这里就再也不重复。code
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
分享图片或文字等简单的内容,能够直接使用系统提供的分享方法,无需集成第三方。以下orm
/** * 分享图片(直接将bitamp转换为Uri) * @param bitmap */
private void shareImg(Bitmap bitmap){ Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null,null)); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("image/*");//设置分享内容的类型
intent.putExtra(Intent.EXTRA_STREAM, uri); intent = Intent.createChooser(intent, "分享"); startActivity(intent); }
因为咱们获取到的是图片的Bitmap格式,为了方便直接将其转换为Uri,可直接调用系统保存图片的方法或者咱们上面自定义的图片存储方法,均可以获得Uri。以后给startActivity传入一个ACTION_SEND的Intent,设置分享类型便可。
效果图
以下图,长按二维码选择存储至手机后,提示存储成功打开相册便能看到图片。点击分享便可分享至微信等平台。
源码已更新至GitHub,地址:https://github.com/yangxch/GenerateQRCode