
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