記錄一下Android原生分享
儲存檔案
原生分享使用Intent進行,如果要分享圖片,需要將圖片儲存,獲取到路徑再進行分享。儲存圖片可以採取儲存到相簿,SD卡等多種思維。
//儲存到相簿
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.download_qr);
String url = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "二維碼分享", null);
Uri uri = Uri.parse(url);
複製程式碼
然而此種方法實測時會發現在部分小米裝置上失敗,具體原因目前不知,因此採取儲存到外設的方式。
很多軟體會採取直接儲存在SD卡根目錄的方式,不過這種方案會造成解除安裝軟體也無法跟隨刪除的垃圾檔案,因此採取儲存在外部儲存的data資料夾,這樣會保證刪除軟體時會一併解除安裝,並且對許可權要求最低。
//儲存到外部儲存的data資料夾中
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.download_qr);
File fileDir = getExternalFilesDir(null);
fileDir.mkdirs();
File file = new File(fileDir, "share.png");
FileOutputStream outputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.close();
Uri uri = Uri.fromFile(file);
複製程式碼
進行分享
在獲取到檔案Uri之後,可以進行分享工作,原生分享通過Intent啟動所有可支援的軟體進行分享。Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
//分享到朋友圈的文字,只對朋友圈有效
intent.putExtra("Kdescription", "朋友圈文字標題");
//分享的檔案
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
startActivity(Intent.createChooser(intent, "分享"));
複製程式碼