Androidアプリの共有を実装する
Androidアプリを作成していると、自分で作っているアプリと他のアプリを連携させたい場合があると思います。
例えば、自分で作っているアプリのデータを、メールやLINEで他の人に送りたいといった場合です。
他のアプリと連携するなんて、連携するアプリごとに固有の実装が必要で大変そうと思うかも知れません。しかし、AndroidにはIntentという仕組みがあり、この仕組みによりアプリ連携の実装が容易になっています。
本記事では、URLメモに連携先アプリを呼出す処理(共有機能)を実装しているので、それを題材に実装方法について紹介したいと思います(暗黙的インテントを使っています)。
ちなみに、URLメモは共有先(呼び出される)側の実装もしています。実装方法は下記にて紹介しています。
以下の手順で実装します。
公式ドキュメントのこちらが参考になります。
- ボタン押下時に共有機能を動作させる
- 共有Intentを作る
- 共有可能なアプリを呼出す
ボタン押下時に共有機能を動作させる
URLメモでは、ToolBarに共有ボタン(左図)を追加しました。
menuのxmlに共有ボタン用のitemを追加します。
3番目のitemが共有ボタンです。
ToolBarの設定は、ここでは詳細を書きませんが、次のことが必要です。
- Manifestのthemeの設定
- ActivityのonCreateでsetSupportActionBarを実行する
- onCreateOptionsMenuをoverrideして、ToolBarに表示させたいmenuをinflateする
次にmenuボタンを押下した時のイベント処理ですが、
onOptionsItemSelectedをoverrideします。このメソッドは、MenuItemを引数で持っており、その引数からどのmenuが押下されたか判断して、それぞれの処理を実行します(実装例は下の方にあります)。
共有Intentを作る
アプリを呼出す時、AndroidはIntentの設定を参照して適切なアプリを呼び出してくれます。
共有で他のアプリを呼出したい場合は次のようなIntentを生成します。
putExtraの第2引数には、共有先のアプリに渡したいデータをセットして下さい。
val intent = Intent().apply {
action = Intent.ACTION_SEND
type = "text/plain"
putExtra(Intent.EXTRA_TEXT, 共有したいデータ)
}
共有可能なアプリを呼出す
別アプリを呼び出す場合は、startActivityを利用します。
startActivity(intent)
または、
startActivity(
Intent.createChooser(
intent,
選択ダイアログのタイトル(文字列)
)
)
Intent#createChooserを使ったかどうかの違いは下図のようになります。
右側が、createChooserを利用した方になります。共有できるアプリが一つの場合は、下図のようにアプリを選択するダイアログが表示されず、共有先アプリが起動します。
これまでの説明のまとめとして、共有可能なアプリを呼出すまでのソースコード例を下記に載せます。
また、実は上に記載した共有可能なアプリの呼出し方では、エラーとなる場合があるので、下記のソースコードではそれを考慮しています。
エラーとなる場合ですが、先にAndroidはIntentの設定を参照して、適切なアプリを呼出してくれると述べましたが、適切なアプリが存在しない場合はエラーとなります。そのため、適切なアプリが存在するかのチェック処理を追加しています。
本記事では、Androidアプリの共有の実装方法について紹介しました。
厳密には、アクションがSEND、タイプがtext/plainのアプリと連携するための実装例ですが、これを共有と呼んでいるのは、自信ないですが公式サイトに共有インテントという単語が出ているあたりの説明から?かと思っています。
公式サイトのこちらを参照すると、色々なアプリとの連携方法が理解できると思います。他のアプリと連携する場合のポイントは、Intentの作り方です。
また、Intent#createChooser利用時、共有先アプリ選択ダイアログから、自アプリを除外する方法を次の記事で紹介しています。ご参考いただければ幸いです。