之前写过生成自定义二维码的两篇文章:《Android生成自定义二维码》《Android生成二维码--拍照或从相册选取图片》,下面就介绍一下Android应用内如何保存以及分享二维码图片。

保存图片

    Adnroid中保存图片可以直接调用系统提供的插入图库的方法,或者指定存储路径。插入图片后需要刷新系统图库。

  1. 调用系统提供的插入图库方法
 //插入到系统图库MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", "");

    刷新图库

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

    这个方法无法指定保存路径和图片名,而且刷新将扫描整个SD卡,用户体验不好,所以看下面这个方法。

  1. 指定存储路径,更新图库
//发送广播通知系统图库刷新数据sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));

    这里的uri是保存图片的路径,直接更新指定的路径将不会扫描整个SD卡,节省资源的同时也能自定义保存路径和文件名。所以需要先将图片保存到指定路径下,利用文件的IO流保存即可,如下:

/** * 保存图片到指定路径 * * @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,需要动态申请,方法前面文章已经介绍过,这里就不再重复。


分享图片

分享图片或文字等简单的内容,可以直接使用系统提供的分享方法,无需集成第三方。如下

/** * 分享图片(直接将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,设置分享类型即可。

效果图

如下图,长按二维码选择存储至手机后,提示存储成功打开相册便能看到图片。点击分享即可分享至微信等平台。

choose_sava.png save.png share.png share_list.png




源码已更新至GitHub,地址:https://github.com/yangxch/GenerateQRCode


更多相关文章

  1. Android(安卓)ImageView 不显示JPEG图片 及 Android(安卓)Studio
  2. Android实现动态高斯模糊效果示例代码
  3. 关于安转android studio 在选择JDK找不到路径的问题
  4. Android(安卓)上传图片到 Asp.Net 服务器的问题
  5. 在PC上体验Android,别人是别人,我的是我的
  6. android实现图片翻转动画
  7. android emulator: ERROR: unknown virtual device name:解决方
  8. android volley 框架图片请求后有时会导致第一次初始化过慢的原
  9. Android(安卓)webview 微信分享图片

随机推荐

  1. Android之XML序列化和解析
  2. android 获取应用程序包名,图标,入口Activi
  3. ContentProvider原理分析二 MediaProvide
  4. Android开发之通知栏
  5. Android(安卓)EditText输入最大长度限制
  6. Android(安卓)Studio将程序中的文言生成
  7. Unity3D 与Android(安卓)相互传递消息
  8. openfeint for android
  9. 【Android(安卓)开发教程】显示普通对话
  10. Android窗口类型