Android电话簿问题导入联系人

时间:2013-01-27 06:34:09

标签: android android-contacts

我正在尝试从Android电话簿导入联系人。该应用程序适用于所有手机,但在HTC手机上失败。我的代码在

之下
 Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
        pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
        startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);


Uri contactUri = data.getData();
                String[] projection = {Phone.DISPLAY_NAME,Phone.NUMBER};

                Cursor cursor = getContentResolver()
                        .query(contactUri, projection, null, null, null);
                cursor.moveToFirst();

                // Retrieve the phone number from the NUMBER column
                int column = cursor.getColumnIndex(Phone.NUMBER);
                int nameColumn=cursor.getColumnIndex(Phone.DISPLAY_NAME);
                String number = cursor.getString(column);
                String fName=cursor.getString(nameColumn);
                contact = new HashMap<String, String>();
                contact.put(fName, number);
                eName.setText(fName);

就像在客户端电话上一样,我无法看到日志。

2 个答案:

答案 0 :(得分:1)

Android为其联系人(Contact&lt; - RawContact&lt; - Data)提供了几个抽象,以便能够分离不同的提供商(Google,FB等)并汇总它们。该文档提供了一个很好的概述,联系人提供者的工作方式:

http://developer.android.com/guide/topics/providers/contacts-provider.html

我认为您的问题是,您正在尝试访问联系人表格中的数据字段。 Intent.ACTION_PICK返回指向联系人表的联系人uri。

您需要做的是从contacts表中获取Contacts._ID,然后从ContactsContract.Data表中获取数据,并通过Contacts._ID进行过滤。您可以在此处找到示例查询:

http://developer.android.com/reference/android/provider/ContactsContract.Data.html

答案 1 :(得分:0)

用户遇到了崩溃吗?可能是由于某些设备在没有名称/号码的情况下在NUMBER的DISPLAY_NAME中返回null(如果设备具有Skype等自定义内容提供商,则可能会发生这种情况)。某些设备返回display_name中的数字,并返回一些null。

或者只是用户看不到任何联系人?你知道用户是否真的有吗?例如,如果联系簿为空,您的代码会发生什么。