コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

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 value)
ArrayList putStringArrayListExtra(String name, ArrayList value)
ArrayList putParcelableArrayListExtra(String name, ArrayList value)
ArrayList putCharSequenceArrayListExtra(String name, ArrayList value)
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)