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")) } }
解ってしまえばなんてことない処理ですね。
Comments