android - 在 Android 应用程序中获取联系人

标签 android android-contacts

我正在访问这些链接以在我的应用程序中获取联系人

How to call Android contacts list?

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

我可以在手机上显示联系人列表,但是

-

  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.
                    }
                }

on log cat it shows output as :

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

那是联系人的姓名是 xyz,它至少有 1 个与之关联的电话号码。请帮助我如何获得与该联系人关联的号码。

编辑:

如果我在代码中使用 this(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

最佳答案

通过查看答案,我认为您已经了解了如何获取联系人的答案,现在您想要在您的 Activity 中获取选定的联系人。

To fetch contact number specific to the contact name:

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是您要获取其联系电话的联系人姓名。

I am assuming that you have shown the contacts with checkbox in ListView and here is your solution to get the contact list selected by the user to your activity:

1. 使用 startActivityForResult() 开始您的联系 Activity 。

2. 在联系人 Activity 中初始化ArrayList 变量说contactArrayList

3. 当用户选中复选框时,将此联系人添加到您的contactArrayList 并继续添加,当取消选中时code> 然后从 contactArrayList 中删除联系人。

4. 当用户按下 done 然后使用您在 contactArrayList 中添加的选定联系人列表设置结果 ok,如下所示:

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

finish() 这个 Activity 。

5. 关于您的调用 Activity 覆盖:

@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以上测试过的。

关于android - 在 Android 应用程序中获取联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8785131/

相关文章:

android - 在 Android 中使用 C++ 构建 NDK 的问题

java - 数组列表和 ListView

android - 渲染期间引发的异常 :Binary XML file line #-1:error inflating class<unknown>

android - 联系人备份和同步应用程序

android - 如何使用 SHOW_OR_CREATE_CONTACT 并为联系人设置照片?

android - 如何以编程方式创建联系人

android - CardView 中包含的 ListView 未显示全长

python - buildozer 版本需要支持 AAB(Android App Bundle)的 python-for-android 版本

java - Android 检索联系人数据时出现 RuntimeException

安卓 : how to pass multiple numbers to create contact page