画像とテキストを共有するには (ShareActionProvider編)
2021/07/26
Androidには使用頻度の高いサービスのアイコンを表示してくれるShareActionProviderと言うものがあります。これはアクションバーを使うので、.NoActionBarなテーマを使っている場合は、ツールバーを設定すれば使えるようになります。
menu/toolbar_share.xml
標準のシェアアイコンが自動的に表示されますが、カスタムは困難かも。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/share"
app:iconTint="@android:color/white"
app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"
app:showAsAction="ifRoom" />
</menu>
ShareActivity
import androidx.appcompat.widget.ShareActionProvider
3種類あるので、間違えずにAndroidX版をimportして下さい。
初回にACTION_SENDのインテントを渡せば完了。アイコンをクリックすればリスト形式で表示されます。
プレビュー機能はないようです。
private fun createShareIntent(): Intent {
val text = "https://play.google.com/store/apps/details?id=$packageName"
val type = "image/jpeg"
val uri = Uri of image
return Intent(Intent.ACTION_SEND)
.putExtra(Intent.EXTRA_TEXT, text)
.putExtra(Intent.EXTRA_STREAM, uri)
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.setType(type)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setSupportActionBar(toolbar)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.toolbar_share, menu)
menu?.findItem(R.id.share)?.also {
val provider = MenuItemCompat.getActionProvider(it) as? ShareActionProvider
provider?.setShareIntent(createShareIntent())
}
return super.onCreateOptionsMenu(menu)
}