読者です 読者をやめる 読者になる 読者になる

liguofeng29’s blog

個人勉強用ブログだっす。

AndroidのIntent - Data属性とType属性

Data属性はAction属性にデータを提供する。

特性:

  • Data属性値はUriオブジェクトである
  • Uriの形式
    • scheme://host:port/path
    • 例:content://com.android.contacts/contacts/1

Type属性はData属性が指定したUriのMINEタイプを指定する。 abc/xyzのフォーマットであればOK。

DataとTypeの関係:

  • Intentに先にDataを指定、後にTypeを指定した場合、Type属性がData属性を上書きする
  • Intentに先にTypeを指定、後にDataを指定した場合、Data属性がType属性を上書きする
  • Intentが両方の属性を持ちたい場合には、IntentのsetDataAndType()を利用する

いくつかのAction属性とData属性の組み合わせ

  • ACTION_VIEW contect://com.android.contacts/contacts/1
    • IDが1の連絡先表示画面
  • ACTION_EDIT contect://com.android.contacts/contacts/1
    • IDが1の連絡先編集画面
  • ACTION_DIAL contect://com.android.contacts/contacts/1
    • IDが1の連絡先ダイアル画面
  • ACTION_VIEW tel:123
    • 123ダイアル
  • ACTION_DIAL tel:123
    • 123ダイアル
  • ACTION_VIEW content://contacts/people/
    • 連絡先リストを表示する

サンプルコード

package com.example.liguofeng.intentsample;

import android.app.Activity;
import android.content.ComponentName;
import android.content.CursorLoader;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    public static int PICK_CONTACT = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 指定URL表示
        Button btn1 = (Button) findViewById(R.id.showURL);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Intent生成
                Intent intent = new Intent();
                // Action属性設定
                intent.setAction(Intent.ACTION_VIEW);
                // Data属性設定
                Uri uri = Uri.parse("http://google.co.jp");
                intent.setData(uri);
                // 起動
                startActivity(intent);
            }
        });

        // 連絡先編集画面表示
        Button btn2 = (Button) findViewById(R.id.showContact);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Intent生成
                Intent intent = new Intent();
                // Action属性設定
                intent.setAction(Intent.ACTION_EDIT);
                // Data属性設定
                Uri uri = Uri.parse("content://com.android.contacts/contacts/1");
                intent.setData(uri);
                // 起動
                startActivity(intent);
            }
        });

        // ダイアル画面表示
        Button btn3 = (Button) findViewById(R.id.dialBtn);
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Intent生成
                Intent intent = new Intent();
                // Action属性設定
                intent.setAction(Intent.ACTION_DIAL);
                // Data属性設定
                Uri uri = Uri.parse("tel:123456789");
                intent.setData(uri);
                // 起動
                startActivity(intent);
            }
        });
    }
}

f:id:liguofeng29:20151211205529g:plain