データのシェア - 他のプログラムからのデータを受け取る
「データのシェア - 単純なテキストを他のアプリに送る」では、 自分のプログラムから他のアプリに対してデータをシェアする方法を紹介しました。
ACTION_SEND のインテントに、テキストをセットして送るのでしたね。
この記事では、そのデータの受け取り側がどうするのか、説明したいと思います。
データのタイプが text/plain であるものを受け取ったらそれを表示する、という簡単なプログラムを作ります。
他のプログラムからのテキストデータを受け取り表示する
ここで作るプログラム "Receiving Text" をインストールすると、「データのシェア - 単純なテキストを他のアプリに送る」 で作ったプログラムでテキストのシェアを試みると、シェアするプログラムリストに "Receiving Text" が出てきます。
ここでそれを選び起動すると、次のように渡したテキストが表示されます。
コードは次の通り。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView)findViewById(R.id.textView1);
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if(Intent.ACTION_SEND.equals(action)
&& "text/plain".equals(type)){
textView1.setText(
intent.getStringExtra(Intent.EXTRA_TEXT));
}
}
onCreate にてアクティビティが始まったときに、インテント、アクション、及びタイプを取得します。
アクションが Intent.ACTION_SEND でタイプが "text/plain" である場合、インテントからデータを取得 (getStringExtra) して、それを TextView にセットしています。
また、このアクティビティが ACTION_SEND で text/plain を受け取れることをシステムに教えるために、AndroidManifest.xml にインテント・フィルターを記述します。
<activity
android:name="com.example.sharing2.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>