1

メールアドレスのみの電話連絡先をユーザーに表示する必要があるアプリを構築しようとしています。ユーザーがアプリの編集ボックスをクリックすると、ユーザーが選択した後、メールアドレスのみの電話連絡先が表示される必要があります連絡先のメールアドレスをアプリに送り返す必要があり、アプリでさらに使用します。

//これは onActivityResult() メソッドの下の私のコードです

          try 
            {

                Uri result = data.getData();  
                String id = result.getLastPathSegment();  
                cursor = getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[] { id }, null);  
                emailIdx = cursor.getColumnIndex(Email.DATA);

                if (cursor.moveToFirst()) 
                {
                    while (cursor.isAfterLast() == false)
                    {
                        emailid = cursor.getString(emailIdx);

                        allids.add(emailid);
                        cursor.moveToNext();
                    }
                } 

                else 
                {
                    //no results actions
                }  
            } 

// これは私が渡しているインテントです。

Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
                intent.setType(ContactsContract.CommonDataKinds.Email.ADDRESS);

                  startActivityForResult(intent, 1);

// マニフェスト権限。

            <uses-permission android:name="android.permission.READ_CONTACTS" />
            <uses-permission android:name="android.permission.GET_ACCOUNTS" />


            <intent-filter>

            <action android:name="android.intent.action.PICK" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android.cursor.dir/email_v2" />
            <data android:mimeType="vnd.android.cursor.item/email_v2" />

            </intent-filter>

アプリを実行しようとすると、以下のエラーが発生します。

 android.content.ActivityNotFoundException: No Activity found to handle Intent {act=android.intent.action.PICK typ=data1 }         

何が問題なのかわかりません。manifest.xml に何か不足していますか?.助けてください。

ありがとう!

4

2 に答える 2

1

これは今ではかなり古いですが、私がそれを探していたら、他の人もそうだと確信しているので、ここに私の解決策があります. インテントは次のように起動されます。

    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE);
    startActivityForResult(intent, RC_GET_EMAIL);

次に、選択した連絡先からメール アドレスを取得します。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == RC_GET_EMAIL) {
        if(resultCode == Activity.RESULT_OK) {
            Uri contactUri = data.getData();
            String[] projection = new String[]{ContactsContract.CommonDataKinds.Email.DATA};
            Cursor cursor = getContext().getContentResolver().query(contactUri, projection, null, null, null);
            if(cursor != null) { 
                if(cursor.moveToFirst()) {
                    int emailIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
                    String email = cursor.getString(emailIndex);
                    // do something with email
                }
                cursor.close();
            }
        }
    }
}

Marshmallow 以降では、意味のあることを行うには、手動で READ_CONTACTS 権限を要求する必要があることに注意してください。

于 2016-06-03T01:57:03.687 に答える
-2

以下のコードをリスナーに入れてください。これがお役に立てば幸いです。

コード

Intent intent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
于 2013-03-22T11:58:44.800 に答える