Выбрать контакты в приложении для Android - PullRequest
15 голосов
/ 09 января 2012

Я перешел по этим ссылкам, чтобы получить контакты в моем приложении

Как вызвать список контактов Android?

http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/

Iможет отображать список контактов на телефоне, но

-

  1. Я хочу добавить флажок для каждого контакта, чтобы пользователь мог выбрать несколько контактов и нажав кнопку Готовоон должен иметь возможность получить все контакты, которые он выбрал

  2. Также я хочу получить имя контакта, а также номер телефона контакта, см. мой код:

    if (resultCode == Activity.RESULT_OK) {
                    Uri contactData = data.getData();
                    Cursor c = managedQuery(contactData, null, null, null, null);
                    if (c.moveToFirst()) {
                        String name = c.getString(c
                                .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                        String number = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                        Log.v("name", name +" "+number);
                        // TODO Whatever you want to do with the selected contact
                        // name.
                    }
                }

на входе в систему cat он отображает вывод в виде:

01-09 12:46:41.688: V/name(699): Xyz 1

, то есть имя контакта - xyz, и с ним связано как минимум 1 номер телефона. Пожалуйста, помогите мне вкак я могу получить номер, связанный с этим контактом.

РЕДАКТИРОВАТЬ:

если я использую эту (String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER));) строку в коде, я получаю следующее исключение:

01-09 13:33:23.008: E/AndroidRuntime(786): FATAL EXCEPTION: main
01-09 13:33:23.008: E/AndroidRuntime(786): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-2C2E30/1 (has extras) }} to activity {sra.com/sra.com.ContactsDemo}: java.lang.IllegalArgumentException: column 'number' does not exist
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.ActivityThread.access$2800(ActivityThread.java:125)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.os.Looper.loop(Looper.java:123)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-09 13:33:23.008: E/AndroidRuntime(786):  at java.lang.reflect.Method.invokeNative(Native Method)
01-09 13:33:23.008: E/AndroidRuntime(786):  at java.lang.reflect.Method.invoke(Method.java:521)
01-09 13:33:23.008: E/AndroidRuntime(786):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-09 13:33:23.008: E/AndroidRuntime(786):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-09 13:33:23.008: E/AndroidRuntime(786):  at dalvik.system.NativeStart.main(Native Method)
01-09 13:33:23.008: E/AndroidRuntime(786): Caused by: java.lang.IllegalArgumentException: column 'number' does not exist
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99)
01-09 13:33:23.008: E/AndroidRuntime(786):  at sra.com.ContactsDemo.onActivityResult(ContactsDemo.java:49)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.Activity.dispatchActivityResult(Activity.java:3890)
01-09 13:33:23.008: E/AndroidRuntime(786):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3511)
01-09 13:33:23.008: E/AndroidRuntime(786):  ... 11 more

Ответы [ 5 ]

9 голосов
/ 17 января 2012

Видя ответы, я думаю, что вы получили ответ, как получать контакты, и теперь вы хотите получить выбранные контакты в вашей деятельности.

Чтобы получить контактный номер, определенный для имени контакта:

ContentResolver contactResolver = getContentResolver(); 
Cursor cursor = contactResolver.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null);

if(cursor.getCount() > 0){
    cursor.moveToFirst();
    do {
       String number = cursor.getString(mCursor.getColumnIndex(Phone.NUMBER));
    }while (cursor.moveToNext() ); 
}

Примечание: Здесь contactName - это имя контакта, которого выхочу указать контактные номера.

Я предполагаю, что вы показали контакты с флажком в ListView, и вот ваше решение, чтобы получить список контактов, выбранный пользователем для вашей деятельности:

1. Начните свою контактную деятельность с startActivityForResult().

2. Инициализируйте ArrayList переменную в контактной активности, скажем contactArrayList.

3. Когда пользователь checks the checkbox, добавьте этот контакт в свой contactArrayList и продолжайте добавлять, а когда unchecks, затем удалите контакт из contactArrayList.

4. Когда пользователь нажмет кнопку «Готово», установите результат в соответствии с выбранным списком контактов, который вы добавили в contactArrayList, например:

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putStringArrayList("contacts", contactArrayList);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);

и finish() thisактивность.

5. Переопределение активности вызовов:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == RESULT_OK && data != null ){
             Bundle bundle = new Bundle();
             bundle =  data.getExtras();
             ArrayList list = bundle.getStringArrayList("contacts");
    }
}

Примечание: Код вышепроверено более 2.3.3.

4 голосов
/ 09 января 2012

Пожалуйста, попробуйте этот код

Cursor c = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    String name, number = "";
    String id;
    c.moveToFirst();
    for (int i = 0; i < c.getCount(); i++) {
        name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));

        if (Integer.parseInt(c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
            Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id },
                    null);
            while (pCur.moveToNext()) {
                number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            }
        }
        Log.i("name ", name + " ");
        Log.i("number ", number + " ");
        c.moveToNext();
2 голосов
/ 12 января 2012

Просто имейте объект данных контакта, и всякий раз, когда вы выбираете какой-либо элемент в списке, задайте значение этого контакта в этом поле.

в

AdapterView.onItemClickListener()
{
   public void onItemClick(AdapterView list, View view, int position, long id)
   {
      Contact contact=listContacts.get(position);
      selectedContact=contact;//If Done Button on List
      //if activity is to be finished on selection
      { 
         Intent intent=new Intent();
         intent.putExtra(KEY_NAME, contact.Name);
         ....
         setResult(RESULT_OK, intent);
         finish();
      }
    }
}
2 голосов
/ 09 января 2012

Здесь у вас есть курсор c

Cursor c = getContentResolver().query(Phones.CONTENT_URI, null, null,null, null);

, чтобы получить имя

String name = c.getString(c.getColumnIndex(People.NAME));

, чтобы получить число

String number = c.getString(c.getColumnIndex(People.NUMBER));

Вы можете перебиратькурсор и сохранить их в список.Создайте представление списка флажков и свяжите его с этим списком.

1 голос
/ 23 июня 2012

Попробуйте код ниже:

ContentResolver contactResolver = getContentResolver();     
Cursor cursor = contactResolver.query(Phone.CONTENT_URI, null, Phone.DISPLAY_NAME + "=?", new String[]{contactName}, null);    
if(cursor.getCount() > 0){    
    cursor.moveToFirst();    
    do {    
       String number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));    
    }while (cursor.moveToNext() );     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...