他のアプリと連携(暗黙のIntent)
他のアプリから文字列を受け取ったり、他のアプリへ文字列を渡したり
というのはIntentをつかえば簡単にやり取り出来ます。
もちろん文字列に限りませんし、
特定のアプリに向けてでも、暗黙のIntentで誰かしらお願いします。みたいに投げることも可能です。
というわけで、暗黙のIntentまとめ(雑
受け取る
Manifest.xml
<activity android:name=".ReTranslateActivity" android:icon="@drawable/icon" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.SEND" /> <action android:name="android.intent.action.EDIT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/*" /> </intent-filter> <intent-filter> <action android:name="com.adamrocker.android.simeji.ACTION_INTERCEPT" /> <category android:name="com.adamrocker.android.simeji.REPLACE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
の様に記載します。上が暗黙のIntentの設定で、
SEND:Intent.ACTION_SEND
EDIT:Intent.ACTION_EDIT
を受け取る宣言で、mimeTypeがtext/~~であるものを受け取る設定になります。
下のintent-filterはsimejiとの連携(マッシュルーム)用の設定になります。
もちろんこの設定はいりませんが、並べてかけるという例みたいなものです。
Activity
Intent it = getIntent(); String action = it.getAction(); if(Intent.ACTION_SEND.equals(action) || Intent.ACTION_EDIT.equals(action)) { Bundle extras = it.getExtras(); if(extras != null) { CharSequence ext = extras.getCharSequence(Intent.EXTRA_TEXT); if(ext != null) { mOriginal = ext.toString(); } } }
送る
Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain");//typeを指定して i.putExtra(Intent.EXTRA_TEXT, text);//TEXTも指定。メールとかを意識するならsubjectも可能 try { startActivity(Intent.createChooser(i, null));//常に連携先を選択させる } catch (ActivityNotFoundException e) { //handle error }
雑記1
startActivityの後にfinishとか入れておくと、chooser表示段階でActivityが終了しているので戻れなくなります。
雑記2
Spinnerを利用しているのですが、Chooser表示後に戻るボタンで戻ると、
Spinnerの表示が一番上のものになってしまいました。
ちゃんと復元処理はしているのですが、このケースだけうまくいきませんでした。
実際にはちゃんと復元された状態になっていて、表示の問題だけです。
to.setSelection(toIndex);
としていたのを
to.setSelection(toIndex, true);
としたら幸せになれました。
invalidateやら、Listenerをクリアしてみたり、cache系をいじったりと色々と試してみたんですが・・・
- 関連記事
-
- ProgressDialogとAsyncTaskの(おそらく)正しい使い方
- SeekBarの見た目(style)を設定
- 他のアプリと連携(暗黙のIntent)
- マッシュルームアプリについてメモ
- 綺麗に画像を拡大縮小する