我正在尝试从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);
就像在客户端电话上一样,我无法看到日志。
答案 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。
或者只是用户看不到任何联系人?你知道用户是否真的有吗?例如,如果联系簿为空,您的代码会发生什么。