1

以下のコードを使用しますが、連絡先の名前だけが必要です。このコードは、連絡先、Facebook、Nimbuzz、および ... からすべてのデータを取得します。 Cursor cursor = getContentResolver().query(

            ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

    while (cursor.moveToNext()) {

        //numberPhone = 0;
        contactId = cursor.getString(cursor
                .getColumnIndex(ContactsContract.Contacts._ID));



        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI,
                Long.parseLong(contactId));
        Uri dataUri = Uri.withAppendedPath(contactUri,
                Contacts.Data.CONTENT_DIRECTORY);

        try {
            Cursor nameCursor = getContentResolver()
                    .query(dataUri,null,Data.MIMETYPE + "=?",new String[] { StructuredName.CONTENT_ITEM_TYPE }, null);
            int indexDisplayName = nameCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
            nameCursor.moveToFirst();
            do {

                String firstName = nameCursor.getString(nameCursor
                        .getColumnIndex(Data.DATA2));
                String lastName = nameCursor.getString(nameCursor
                        .getColumnIndex(Data.DATA3));
                Arrayename.add(firstName+" "+lastName);
                //String display = nameCursor.getString(indexDisplayName);





                //Log.d("display name", "display name is: " + display);

            } while (nameCursor.moveToNext());
            nameCursor.close();
        } catch (Exception e) {
            Toast.makeText(this, "Error Happend While Reading Names",
                    Toast.LENGTH_SHORT).show();
        }
    }

連絡先データのみを取得するにはどうすればよいですか?

4

1 に答える 1

0

私があなたを正しく理解しているなら、あなたが必要とするものは以下です:

結果を表示するための xml ファイルを作成します。

  1. ボタンを作成すると、インテントが起動します。
  2. textview または edittext を作成します (編集テキストを使用しました)

ボタンのクリック時に startActivityforresult(its args....) を呼び出す次のようなインテントを開始します。

 final static int CONTACTS_RESULT = 3;

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

次に、コールバックで結果を処理します。

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

    switch (requestCode) {

    case CONTACTS_RESULT:

        if (resultCode == RESULT_OK) {

            Uri returnedData = data.getData();
            id = returnedData.getLastPathSegment();

            name = retriveName(data);
            etName.setText(name);
          }

         break;
              }

       }

// このメソッドは、連絡先の名前を取得し、その値を返された値に設定するためのものです。

private String retriveName(Intent data) 
           {
    String name = null;
    Uri returnedData = data.getData();
    String id = returnedData.getLastPathSegment();

    // Cursor for name

    Cursor cursor = getContentResolver().query(returnedData, null, null,
            null, null);

    if (cursor.moveToFirst()) 
                               {

        name = cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME));


    }
    return name;

}

これがあなたのために働くかどうか見てください....

編集: Contacts.DISPLAY_NAME を次の 2 つに置き換えてみましたか:

  1. Contacts.DISPLAY_NAME_PRIMARY
  2. Contacts.DISPLAY_NAME_SOURCE
于 2013-08-11T06:19:23.507 に答える