web-dev-qa-db-ja.com

Android電話番号のみのContactPicker

SOで、フィルターされたバージョンの連絡先ピッカー(電話番号を持つ連絡先のみが表示される)を起動するには、次のコマンドを使用できます。

Intent pickContactIntent = new Intent( Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI );
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, CONTACT_PICKER_RESULT);

したがって、これは機能します。 onActivityResultメソッド内で、選択した連絡先の名前と電話番号を取得する方法を理解しようとしています。

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     // what goes here...
}

OnActivityResult内でさまざまなことを試しましたが、クエリで数値が返されません。

19
user1202422
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);  
startActivityForResult(intent, 1);

String phoneNo = null;
Uri uri = data.getData();
Cursor cursor = getContentResolver().query(uri, null, null, null, null);

if (cursor.moveToFirst()) {
    int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    phoneNo = cursor.getString(phoneIndex);
}

curosr.close();
32
Akash Yadav

Akashの答えに基づいて構築します。

ステップ1-マニフェストに読み取り/書き込みの連絡先権限を追加する必要があります。

<uses-permission Android:name="Android.permission.READ_CONTACTS"/>
<!-- OR - depends on the requiremnts-->
<uses-permission Android:name="Android.permission.WRITE_CONTACTS"/>

ステップ2-次に、連絡先ピッカーインテントを起動する必要がありますが、その前に、連絡先権限が付与されているかどうかを確認する必要があります( Android> = 23)

if (hasPermissions(Manifest.permission.READ_CONTACTS)) {
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
      startActivityForResult(intent, REQUEST_PICK_CONTACT);
} else {
     // Request Permissions
}

ステップ3-次に、アクティビティ結果を取得する必要があります

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_PICK_CONTACT) {
         String phoneNo = null;
         String name = null;

         Uri uri = data.getData();
         Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);

         if (cursor.moveToFirst()) {
         int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
         int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);

         phoneNo = cursor.getString(phoneIndex);
         name = cursor.getString(nameIndex);

         Log.e("onActivityResult()", phoneIndex + " " + phoneNo + " " + nameIndex + " " + name);
      }
      cursor.close();
  }
}

そして、ええ、それはそれです。

9
Noman Rafique