Intentを使って画面を遷移するべし!

Intent概要

複数のアプリケーションや異なるActivityを繋ぐことが可能であり、
データの受け渡しも出来る仕組みです。

インテントは、2種類あり、明示的インテント、暗黙的インテントに分かれます。
それでは、明示的インテントから解説していきます。

明示的インテント

アクティビティをクラス名で指定して呼び出す

intent-image01

SendIntentActivity.java  送信元
CatchIntentActivity.java   送信先

SendIntentActivity.java

//buttonを取得
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(button1ClickListener);

OnClickListener button1ClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
    //CatchIntentActivityへintentを送る
    Intent intent = new Intent();
    intent.setClassName(this, CatchIntent);
    //putExtraメソッドは、多くの型に対応している(int,String,boolean, Bundleなど)
    intent.putExtra("testString", "this is intent string");
    startActivity(intent);
    }
};

SendIntentActivityで、 ボタンがクリックされた時に、送信先である
CatchIntentActitivity へ、パラメータ付きで送信している。

CatchIntentActivity.java

Intent intent = getIntent();
if (intent != null) {
    String str = intent.getStringExtra("testString");
    Toast.makeText(this, str, Toast.LENGTH_LONG).show();
}

インテントを取得して、nullじゃないなら、送信先で指定した “testString”というkeyを引数にし、データを取得している。 最後に、androidのToastで出力している。
※Toastを知らない人は、画面上にメッセージが 数秒出てくるものだと考えてください。

intent取得メソッド
String型:getStringExtra() 戻り値がない場合、null
int型:getIntExtra() 第2引数に、キーが存在しない場合の値をセットする
boolean型:getBooleanExtra() 第2引数に、キーが存在しない場合の値をセットする
HashMap型 :getSerializableExtra(); 戻り値がない場合、null

コード例:

Intent intent = getIntent();
String keyword = intent.getStringExtra("keyword");
boolean flg = intent.getBooleanExtra("flg", false);
int status = intent.getIntExtra("status", 0);

その他、上記で記載してなかったメソッドで重要なもの startActivityForResult()
こちらは、CatchIntentActivityで何かの処理をさせて、 再び、SendIntentActivityに戻したいときなどに使います。

SendIntentActivity(上記のプログラム記述とほとんど同じです。)

//buttonを取得
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(button1ClickListener);

OnClickListener button1ClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
        //CatchIntentActivityへintentを送る
        Intent intent = new Intent();
        intent.setClassName(this, CatchIntent);
        //putExtraメソッドは、多くの型に対応している(int,String,boolean, Bundleなど)
        intent.putExtra("testString", "this is intent string");
        startActivityForResult(intent);
    }
};

CatchIntentActivity.java

Intent intent = getIntent();
if (intent != null) {
    String str = intent.getStringExtra("testString");
    //何かの処理など
}
intent.putExtra("test2String", "from CatchIntentActivity"); 
intent.Result(RESULT_OK, intent); 
finish();

SendIntentActivity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

     if (resultCode == RESULT_OK) {
         String str = intent.getStringExtra("test2String");
         Toast.makeText(this, str, Toast.LENGTH_LONG).show();
     } else if (resultCode == RESULT_CANCELED) {
         //キャンセル処理
     }
}

暗黙的インテント

ここからは、暗黙的インテントについて解説していきます。
暗黙的とは、はっきりと示さないことを意味しています。

宛先のオブジェクトを明示的に指定せず、
Intentのパラメータに、以下のように埋め込むことにより、
対象となるオブジェクト(Activity、Service、BroadcastReceiver)が呼び出される。

使い方

Webブラウザを起動する
アプリケーション: Webブラウザ
アクション:Intent.ACTION_VIEW(android.intent.action.VIEW)
URL:「http://」「https://」で始まるURL形式

コード例:

Uri uri = Uri.parse("http://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

メールアプリを起動する
アプリケーション: メール送信
アクション:Intent. ACTION_SEND(android.intent.action.SEND)
URL:「mailto:hoge@example.com」

コード例:

Uri uri = Uri.parse(“mailto:hoge@example.com”); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);