Android生成二維碼--儲存和分享二維碼圖片
阿新 • • 發佈:2018-11-02
之前寫過生成自定義二維碼的兩篇文章:《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