fc2ブログ

他のアプリと連携(暗黙の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系をいじったりと色々と試してみたんですが・・・

関連記事

コメントの投稿

非公開コメント

スポンサードリンク
開発中に一息

アプリ一覧
最新記事
最新コメント
最新トラックバック
検索フォーム
月別アーカイブ
カテゴリ
RSSリンクの表示
リンク
QRコード
QR