Androidアプリ入門 No.63 Intent アクションでデータを受け取る その他のデータの受け渡し
アクションでデータを受け取る
その他のデータの受け渡し
setDataでは、URIしかデータを渡せない。その他の数値や文字列を渡したい場合には、Intent#putExtraメソッドを用いる。また、呼び出されたアクション側では、Intent#getExtras()メソッドでBundleを受け取り、そのBundle#getXxxメソッドでデータを受け取ることができる。簡単な例を示す。まずIntentTestプロジェクトのMainActivity.javaを以下のようにする。
package sample.it; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends Activity { private WebView webView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView = (WebView) findViewById(R.id.webView); webView.setWebViewClient(new WebViewClient()); String url = "http://d.hatena.ne.jp/kuwalab/"; if ("net.kuwalab.web".equals(getIntent().getAction())) { url = getIntent().getData().toString(); String extra = getIntent().getExtras().getString("test"); Toast.makeText(getApplicationContext(), "extra=" + extra, Toast.LENGTH_SHORT).show(); } webView.loadUrl(url); } }
次に、IntentTest2のMainActivity.javaを以下のようにする。
package sample.it2; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private EditText urlEditText; private Button browserButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); urlEditText = (EditText) findViewById(R.id.urlEditText); browserButton = (Button) findViewById(R.id.browserButton); browserButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("net.kuwalab.web"); intent.setData(Uri.parse(urlEditText.getText().toString())); intent.putExtra("test", "testString"); startActivity(intent); } }); } }
IntentTest2を実行しIntentTestを呼び出すと以下のようにデータが受け渡されているのが分かる。
IntentTest2のMainActivity.javaでは以下のようにしてデータを渡している。例はString型だが、int型からboolean配列等いろいろな種類がある。
intent.putExtra("test", "testString");
渡したデータを受け取るには、IntentからBundleクラスのインスタンスを受け取り、そこから渡したデータを取り出す。具体的には以下のようなコードになる。
String extra = getIntent().getExtras().getString("test");
Intent#getExtrasメソッドでBundleクラスのインスタンスが取得できる。そこから、渡した際のキーを指定して値を受け取る。値を受け取るgetterはデータ型ごとに用意されている。今回はStringデータを受け取るのでgetStringメソッドを使用している。
具体的なデータの受け渡しのメソッドは以下となる。
データ型 | put | ||
---|---|---|---|
char | putExtra(String name, char value) | ||
char[] | putExtra(String name, char[] value) | ||
byte | putExtra(String name, byte value) | ||
byte[] | putExtra(String name, byte[] value) | ||
short | putExtra(String name, short value) | ||
short[] | putExtra(String name, short[] value) | ||
int | putExtra(String name, int value) | ||
int[] | putExtra(String name, int[] value) | ||
long | putExtra(String name, long value) | ||
long[] | putExtra(String name, long[] value) | ||
float | putExtra(String name, float value) | ||
float[] | putExtra(String name, float[] value) | ||
double | putExtra(String name, double value) | ||
double[] | putExtra(String name, double[] value) | ||
boolean | putExtra(String name, boolean value) | ||
boolean[] | putExtra(String name, boolean[] value) | ||
String | putExtra(String name, String value) | ||
String[] | putExtra(String name, String[] value) | ||
CharSequence | putExtra(String name, CharSequence value) | ||
CharSequence[] | putExtra(String name, CharSequence[] value) | ||
Parcelable | putExtra(String name, Parcelable value) | ||
Parcelable[] | putExtra(String name, Parselable[] value) | ||
Serializable | putExtra(String name, Serializable value) | ||
Bundle | putExtra(String name, Bundle value) | ||
ArrayList |
putIntegerArrayListExtra(String name, ArrayList |
||
ArrayList |
putStringArrayListExtra(String name, ArrayList |
||
ArrayList | putParcelableArrayListExtra(String name, ArrayList value) | ||
ArrayList |
putCharSequenceArrayListExtra(String name, ArrayList |
||
Bundle | putExtras(Bundle extras) | ||
Intent | putExtras(Intent src) |
データの受取は以下のメソッドで受け取る。基本的にIntent#getExtrasメソッドでBundleを受け取りBundleから以下のメソッド群でデータを受け取る。
データ型 | put |
---|---|
char | getChar(String key) getChar(String key, boolean defaultValue) |
char[] | getCharArray(String key) |
byte | getByte(String key) getByte(String key, byte defaultValue) |
byte[] | getByteArray(String key) |
short | getShort(String key) getShort(String key, short defaultValue) |
short[] | getShortArray(String key) |
int | getInt(String key) getInt(String key, int defaultValue) |
int[] | getIntArray(String key) |
long | getLong(String key) getLong(String key, long defaultValue) |
long[] | getLongArray(String key) |
float | getFloat(String key) getFloat(String key, float defaultValue) |
float[] | getFloatArray(String key) |
double | getDouble(String key) getDouble(String key, double defaultValue) |
double[] | getDoubleArray(String key) |
boolean | getBoolean(String key) getBoolean(String key, boolean defaultValue) |
boolean[] | getBooleanArray(String key) |
String | getString(String key) |
String[] | getStringArray(String key) |
CharSequence | getCharSequence(String key) |
CharSequence[] | getCharSequenceArray(String key) |
Parcelable | getParcelable(String key) |
Parcelable[] | getParcelableArray(String key) |
Serializable | getSerializable(String key) |
Bundle | getBundle(String key) |
ArrayList |
getIntegerArrayList(String key) |
ArrayList |
getStringArrayList(String key) |
ArrayList | getParcerableArrayList(String key) |
ArrayList |
getCharSequence(String key) |