Androidアプリ/日記14
他のアプリと連携してみる
さて、今回はAndroidアプリの肝ともいえるかもしれないIntentを使って、他のアプリとの連携を行ってみます。何をやるかというと、計測した体重を記録する際に、記録を含むテキストを他のアプリで再利用してみます。
SharedPreferencesの読み込み
前回、設定画面を通して、アプリ内共通の設定をSharedPreferencesという仕組みを使って保存しました。・・・PreferenceActivityがほとんどやってくれたので、特にどんな仕組みなのか意識にのぼりませんでしたが。そこで「Twitterに投稿するかどうか?」と「投稿する場合の文言」を設定したので、その設定内容を読み込んでみます。
private SharedPreferences preference;
体重を入力するActivityにSharedPreferencesのインスタンスをプロパティとして持たせます。
preference = PreferenceManager.getDefaultSharedPreferences(this);
Activity.onCreateの中でPreferenceManagerを使ってこのアプリの共通設定を取得します。getDefaultSharedPreferencesメソッドにContextを渡します。
preference.getBoolean("canTwitter", false)
preference.getString("twitFormat", getString(R.string.defaultTweet))
取得した共通設定(SharedPreferences)から設定項目のkeyを指定すると値を取り出します。CheckBoxPreferenceのチェックの有無をgetBooleanで、EditTextPreferenceの文字列はgetStringで取得できます。それぞれ第一引数に設定項目のkeyを、第二引数に設定がなかった場合の初期値を渡しています。
外部アプリの呼び出し
先ほどの設定を確認して、外部アプリを呼び出す場合は新しいIntentを作ってstartActivityで呼び出しています。
if (preference.getBoolean("canTwitter", false)) {
String tweet = preference.getString("twitFormat", getString(R.string.defaultTweet));
tweet = tweet.replace("%w", weightinput.getText().toString())
.replace("%f", fatinput.getText().toString());
Intent twitterIntent = new Intent(Intent.ACTION_SEND);
twitterIntent.setType("text/plain");
twitterIntent.putExtra(Intent.EXTRA_TEXT,tweet);
try {
startActivity(Intent.createChooser(twitterIntent,null));
} catch (ActivityNotFoundException e) {
// 該当するActivityがなかった場合
}
}
テキストの内容に%wが含まれていたら入力された体重値に、%fが含まれていたら入力された体脂肪率値に変換するようにしています。
それでtwitterの公式アプリに値を渡せればいいなと思っていたのですが、どんなIntentを発行するのがいいのかわからなくて、とりあえず上記のコードのようにしておきました。IntentのActionはIntent.ACTION_SENDです。そこに渡す文字列をputExtraで設定し、渡す内容をsetTypeで「text/plain」と設定しました。
この設定したIntentを直接startActivityに渡すのではなく、Intent.createChooserに渡すとIntentを扱うアプリの選択画面を呼び出せるとのことです。
ここまでやって実機で挙動を試してみたら、Twitterの公式アプリはもちろんメーラアプリから何からやたらといっぱいアプリの選択肢がでてきてしまいました。ここから好きなアプリを選んでもらえばいいのでしょうが、あまりにもうっとうしいので何か対策は必要そうです。
- Androidアプリメモ/メモ5画像のファイルを操作するときに、既存の画像ギャラリーからファイルを選択できたらいいな、ということで画像ギャラリーのIntentを発行することにしました。 Intâ¦
Androidアプリ/日記7画面レイアウトの作業が済んだあたりから、実際にActivityがどんな風な見栄えになっているのか確認したいという欲求がでてきました。Googleの提供するAndâ¦- Androidアプリ/日記10Android端末の普及とともに、本屋さんの棚のiPhone開発関連書籍の隅のAndroid開発関連書籍が増えてきたような気がします。パラパラとめくってみても、â¦
- Androidアプリメモ/メモ8Androidアプリを開発し始めた頃はEclipseを開発環境としいたのですが、Android Studioがしっかり動作するようになってきて今はそちらを使ってâ¦
- 開発日記/2021年の日記やよいの青色申告というソフトで帳簿をつけていますが、作業PCの引っ越しの際に困ったときのメモ。 弥生製品群はライセンス認証機構が備わっています。やよいの青色申告â¦
- Kotlin/Composableで構成では、画面に必要な要件を挙げていって、実際にComposableな要素を詰め込んでいってみましょう。今回作るのは簡素なファイラーです。とりあえず、ファイルを一覧â¦
- Kotlin/ViewModelによる状態管理その2前回、データ(状態、ステート)を持っちゃっていたカスタムViewをComposable向けに書きなおすところまで進みました。いろんな話がでてきて頭の整理がおいつâ¦
- Androidアプリ/日記9あけましておめでとうございます。昨年(2010年)はスマフォ元年とか電子書籍元年とか騒がれて、電子ガジェットの普及が目覚ましい一年でした。AUが重い腰を上げてAâ¦
- Androidアプリ/日記8SoftbankキャリアのHTC Desireも2010年10月8日にAndroid OS 2.2へのアップデートを果たしました。噂の通り、動作が全般的に機敏にâ¦
- Androidアプリメモ/メモ3入力されたデータはSQLiteのファイルとして端末内のデータベースに保管されるわけですが、何かの拍子でデータが消失するリスクがあると思います。電車に携帯を置き忘â¦