ワーキンググループ/ハンズオンセッション

インテントを発行してみよう

インテントとは、アプリケーションから、新しいアクティビティを起動するためのパラメータです。

起動するアクティビティは、同じアプリケーション内のアクティビティでも、他のアプリケーション内のアクティビティでも指定することができます。他のアプリケーションのアクティビティを指定するためには、アクションと、Uriという二つのパラメータを指定します。Androidでは、あらかじめ規定されたインテントにたいする動作が組み込まれています。

ここでは、代表的なアクションである、ACTION_VIEWに対する動作を確認するためのアプリケーションを作成してみましょう。

プロジェクトを作成する

必要に応じて、File > New > Android Projectで新規のプロジェクトを作成します。

ここでは、以下のようなプロジェクトを作成してみます。

Project.jpg
Project NameHelloIntentProject
Build TargetGoogle APIs
Application NameHelloIntent
Package Namejp.hews.hellointent
Create ActivityHelloIntentActivity
Min SDK Version3(Bild Targetを指定すると自動的に設定される)

画面を定義する

画面にボタンを配置するには、レイアウトを定義したXMLファイルを編集します。

まず、レイアウトを定義したres/layout/main.xmlを開いて、画面上にボタンを配置します。

この画面でボタンを配置するには、GUIで挿入する方法と、下部の「main.xml」タブから直接XMLを編集する方法があります。ここでは、GUIを用いて定義します。

  • LinierLayoutの最初にEditText(id:EditText01)を挿入します。layout_widthをfill_parentに変更します。
  • 2番目にButton(id:Button01)を挿入します。layout_widthをfill_parentに変更します。
  • 3番目にTextView(id:TextView01)を挿入します。layout_widthとlayout_hightをfill_parentに変更します。
Layout.jpg

インテントを作成して発行するメソッドを定義する

EditTextから文字列を取り出して、ACTION_VIEWのインテントを作成して、startActivityを呼び出します。

判定できないURIの場合には、エラーの内容をテキストビューに表示します。

以下のメソッドをHelloIntentActivity.javaに定義してみましょう。

   private void sendIntent() {
       try {
           EditText et = (EditText)findViewById(R.id.EditText01);
           Intent i = new Intent(Intent.ACTION_VIEW, 
                                 Uri.parse(et.getText().toString()));
           startActivity(i);
       } catch (Exception e) {
           TextView t = (TextView)findViewById(R.id.TextView01);
           t.setText(e.toString());
       }
   }
  • EditTextの内容をUriに変換して、インテントを作成します。
  • 作成したインテントを引数にしてstartActivityを呼び出します。
  • エラー発生時は、TextViewにエラーを表示します。
  • 必要なクラスのインポートは、Ctrl-Shift-Oで挿入できます。

ボタンにリスナーを登録する

ボタンが押された時に、定義したsendIntentを呼び出すリスナーを登録します。

public class HelloIntentActivity extends Activity implements View.OnClickListener  {

    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       Button button = (Button)findViewById(R.id.Button01);
       button.setOnClickListener(this);
    }

    public void onClick(View arg0) {
        sendIntent();
    }
  • HelloIntentActivity.javaを開いて、onCreateメソッドでボタンを取り出して、リスナーを登録します。
  • ボタンリスナーを作成して、リスナー内のonClickメソッドで次で定義するsendIntentメソッドを呼び出します。
  • onClickListenerでリスナーを登録します。

Uriを入力する

URIを入力して、あらかじめ組み込まれているUriに対応するアクティビティを起動してみます。

Uri動作
http://web_addressブラウザを起動するhttp://www.google.com/
tel:phone_numberダイヤル画面を表示しますtel:123456
geo:latitude,longitude地図を表示しますgeo:37,137
content://contacts/peopleコンタクトリストを表示しますcontent://contacts/people/1
HelloIntent.png
HelloIntentMap.png

ソースコード

package jp.hews.hellointent;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class HelloIntentActivity extends Activity implements View.OnClickListener  {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button = (Button)findViewById(R.id.Button01);
        button.setOnClickListener(this);
    }

    public void onClick(View arg0) {
        sendIntent();
    }

    private void sendIntent() {
        try {
            EditText et = (EditText)findViewById(R.id.EditText01);
            Intent i = new Intent(Intent.ACTION_VIEW, 
                                  Uri.parse(et.getText().toString()));
            startActivity(i);
        } catch (Exception e) {
            TextView t = (TextView)findViewById(R.id.TextView01);
            t.setText(e.toString());
        }
    }
}

PDFバージョン

サンプルプログラム


ワーキンググループ/ハンズオンセッション

添付ファイル: fileHelloIntentProject.zip 1954件 [詳細] fileHelloIntent.pdf 6149件 [詳細] fileHelloIntentMap.png 62件 [詳細] fileProject.jpg 1800件 [詳細] fileLayout.jpg 2019件 [詳細] fileHelloIntent.png 1794件 [詳細]