Androidで画像イメージを「SendTo」する時のメモ

  • 投稿:
  • 更新:2020年2月23日
  • by
  • in

s_std_share_dm.png

SurfTideΔ for Androidでタイドグラフ画像(Bitmap)を他アプリと連携するために実装した「共有(SendTo)」機能ですが、意外に面倒だったのメモしておきます。
主な目的はダークモード対応だったんだけど、そちらの方はそれほど難航せずにほぼカラーリソースの作成だけで1日位で実装できましたが、この「共有」機能がマジに時間かかった…

結構古い情報はネットで拾えるんだけど、Android-Q あたりでの実装だと色々変わってきててまとまった情報が無くて…
かといって公式なリファレンスで読み解くのもなぁ…

ってことで、あちこちの情報を集約して出来たのがこちらのロジック

if (bitmap != null) {
 // イメージをContentProviderへ保存
 var result = false
 val values = ContentValues()
 values.put(MediaStore.Images.Media.TITLE, "タイトル(これはほぼ使われない)")
 values.put(MediaStore.Images.Media.MIME_TYPE, "image/png")
 val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
 if (uri != null) {
 val ost: OutputStream?
 try {
 ost = contentResolver.openOutputStream(uri)
 bitmap.compress(Bitmap.CompressFormat.PNG, 100, ost)
 ost?.close()
 result = true
 }
 catch (e: Exception) {
 // イメージ作成エラー
 }
 }
 if (result) {
 // メージを共有
 val share = Intent(Intent.ACTION_SEND)
 share.type = "image/jpeg"
 share.putExtra(Intent.EXTRA_STREAM, uri)
 startActivity(Intent.createChooser(share, "Send to"))
 }
}

解ってしまえばなんてことない処理ですね。