1

ネイティブの Android 連絡先リストを表示し、ユーザーが連絡先を選択したら、連絡先の詳細 (電話番号、電子メールなど) を表示する次のネイティブ画面に移動したいと考えています。ユーザーがメール アドレスまたは電話番号のいずれかを選択したら、そのデータを元のアクティビティに戻し、さらに処理を行いたいと思います。

私は私が使用できることを知っています

startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), REQUEST_CODE_PICK_CONTACT);

次に、自分自身を使用して連絡先を解析しgetContentResolver().query()、必要な各フィールドを保存します。次に、連絡先の詳細として別のアクティビティに最後に表示し、ユーザーが電話番号または電子メールのいずれかを選択したら、それを使用してさらに処理を行います。

内部で次のことを試みましたonActivityResult()

Uri contactData = data.getData();
                Intent intent = new Intent(Intent.ACTION_PICK, contactData);
                startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT_DETAIL);

これは連絡先の詳細を表示しますが、ユーザーが特定の番号を選択すると、Android は前のアクティビティでそれを私に返す代わりにそれを呼び出します。

しかし、可能であればネイティブ画面を使用したいと思います。そうすれば、必要な解析が大幅に減り、余分なアクティビティやフラグメントが不要になります。

誰かがこれを行う方法を提案できますか?

ありがとう

4

2 に答える 2

0

この方法で電話連絡先から連絡先の詳細を取得できます

 Uri uri = data.getData();
    String[] projection    = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER};

    Cursor people = getActivity().getContentResolver().query(uri, projection, null, null, null);

    int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
    int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
  int type = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);

    people.moveToFirst();
    do {
        String name   = people.getString(indexName);
        String number = people.getString(indexNumber);
        System.out.println(name+number);

    } while (people.moveToNext());
于 2016-06-02T07:14:00.997 に答える