メールアドレスを取得するIntentの発行

端末に登録されているメールアドレスを調べるIntentを発行するのは簡単で次のようにするだけです。

Intent intent = new Intent(Intent.ACTION_PICK, 
				ContactsContract.Contacts.CONTENT_URI);  
startActivityForResult(intent, 12345); 

すると、「連絡先」などのアプリが開いて、そこから連絡先を選択させることが可能です。

ここまでは簡単なのですが、メールアドレスを取得するのは少し面倒で、onActicityResultで次のような処理を書きます。

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if(requestCode == 12345){
        Cursor c = null;
        try {
            URI uri = data.getData(); 
            String emailAddress = "";
            String id = uri.getLastPathSegment();
            c = getContentResolver().query(
                    Email.CONTENT_URI, 
                    null,
                    Email.CONTACT_ID + "=?", 
                    new String[] { id }, 
                    null);
            if(c.moveToFirst()){
                emailAddress = c.getString(
                        c.getColumnIndex(Email.DATA));
            }
        }catch(Exception err){
            err.printStackTrace();
        }finally{
            if(c != null)
                c.close();
        }
    }
}

連絡先にはそれぞれIDが割り当てられており、それはURIの最後のスラッシュの後の数字になっています。

そのIDを使ってqueryして返ってきたCursorから目的のデータ(メールアドレスや名前など)を取得できます。

ここではメールアドレスしか調べていませんが、getColumnIndexには次のような列名を渡すことも出来ます。

列名取得できるデータ
Email.DATAEメールアドレス(String型)
Email.DISPLAY_NAME_PRIMARY連絡先の名前(String型)
Email.TYPEメールの種類(String型)
Email.LAST_TIME_CONTACTED最後に連絡した時間(Integer型)
Email.HAS_PHONE_NUMBER電話番号を持っているかどうか。(Integer型 : 1なら有り、0なら無し )
Email.PHOTO_ID連絡先の画像ID(Integer型)

このIntentを使う方法なら連絡先を全て調べる必要がないので楽に特定の連絡先のアドレスや名前などを調べることができて便利です。

関連項目
プライバシーポリシー