で、ShareCompatを使ったらどんなことが出来るのかというと以下のスクリーンショット見たいなやつです。
Google Chromeさんにも共有するボタンがあって、同じような画面が開かれるかと思います。
なので今回はこいつを簡単に実装できるShareCompat
を紹介します。
ちなみに今回はSupoprtLibrary
を使うので、SupportLibrary
を使っていないという猛者はうまく置き換えてみてください。
今回は以下の記事を参考にさせて頂きました。
Android Tips #35 ShareCompat で簡単に共有アクションをつくる
ありがとうございました!
目次
1. ソースコード
早速ソースコードを御覧ください。
String articleURL = "記事のURL"
String articleTitle = "記事のタイトル"
String sharedText = articleTitle + " " + articleURL;
// builderの生成 ShareCompat.IntentBuilder.from(Context context);
ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(this.getActivity());
// アプリ一覧が表示されるDialogのタイトルの設定
builder.setChooserTitle(R.string.menu_article_detail_share_chooser_title);
// シェアするタイトル
builder.setSubject(articleTitle);
// シェアするテキスト
builder.setText(sharedText);
// シェアするタイプ(他にもいっぱいあるよ)
builder.setType("text/plain");
// Shareアプリ一覧のDialogの表示
builder.startChooser();
これを実装したら上のようなスクリーンショットが表示されると思います。
ちなみにTwitterのアプリを選択すると
こんな感じになります。
では1つずつ噛み砕いて行きたいと思います。
2. ShareCompatとは
AndroidDeveloperのリンクは以下になっています。
ShareCompat | Android Developers
ちなみに今回使ったShareCompat.IntentBuilder
はこちらです。
ShareCompat.IntentBuilder | Android Developers
先ほどの文章を引用させて頂きます。
ShareCompat は Activity 間のデータのやりとり (共有) のためのユーティリティクラスです。Support Package に含まれているクラスなので Android 1.6 (APIレベル4) から使用することができます。
Activity 間のデータのやりとりは Intent を使っておこないますが ShareCompat を使うことで ACTION_SEND や ACTION_SEND_MULTIPLE といった共有アクションの暗黙的 Intent をつくったり、逆に共有アクションの詳細な情報を取得するといったことを簡単に実装することができます。
Android4.0以上の場合はShareActionProviderを使うのが妥当らしいです。
が、まだまだAndroidで4.0以上のアプリを作る(正確には日本向けに作る)のはないと思っているので、SuportLibrary
でバージョンを気にせず使えるShareCompat.IntentBuilder
を使うほうがよろしいかと思います。
3. 暗黙的インテントとは
で、上記の引用部分で出てきました、暗黙的インテントというワードですが、こちらが素敵な仕組みとなっています。
暗黙的Intentとは動作のみを指定して他のアプリケーションを起動します。
起動される側(呼び出される側)のアプリケーションは、反応したいイベントに対して返事をする仕組みとなっています。
暗黙的インテントとは逆に明示的インテントというのがあります。
例えば、ブラウザを起動する際に、ブラウザアプリを明示して起動することも出来ます。
しかし、それだとユーザーさんが好んでいるブラウザが使えなかったりするので、UX的には悪いかと思います。
そこを暗黙的インテントを使えば、ブラウザを開きたいという呼び出しに対して反応したアプリ一覧をユーザーさんに選択させることが出来ます。
使ってみるととっても便利なので、ぜひ使ってください!
4. 終わりに
暗黙的インテントがこんなに強力だと思っていませんでした。
多分これから沢山のことに対して使うことになるだろうなと思っています。
ではお疲れ様でした。