Android生成二維碼--保存和分享二維碼圖片


    之前寫過生成自定義二維碼的兩篇文章:《Android生成自定義二維碼》《Android生成二維碼–拍照或從相冊選取圖片》,下面就介紹一下Android應用內如何保存以及分享二維碼圖片。

 

保存圖片

     Adnroid中保存圖片可以直接調用系統提供的插入圖庫的方法,或者指定存儲路徑。插入圖片后需要刷新系統圖庫。

1.調用系統提供的插入圖庫方法

//插入到系統圖庫
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "", "");

 

   刷新圖庫

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

  這個方法無法指定保存路徑和圖片名,而且刷新將掃描整個SD卡,用戶體驗不好,所以看下面這個方法。

 

2.指定存儲路徑,更新圖庫

//發送廣播通知系統圖庫刷新數據
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,需要動態申請,方法前面文章已經介紹過,這里就不再重復。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.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,設置分享類型即可。


效果圖

  如下圖,長按二維碼選擇存儲至手機后,提示存儲成功打開相冊便能看到圖片。點擊分享即可分享至微信等平台。


       

       

 


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM