我找到了这个循环联系人的解决方案:
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while(people.moveToNext()) {
int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.PhoneLookup.NUMBER);
if (numberFieldColumnIndex >= 0) {
String number = people.getString(numberFieldColumnIndex);
}
}
people.close();
String contact = people.getString(nameFieldColumnIndex);
工作正常,它会存储我的所有联系人姓名,但int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.PhoneLookup.NUMBER);
始终为-1
。你能告诉我问题在哪里吗?谢谢:))
答案 0 :(得分:0)
正确获取联系人名称只是一种合作关系..因为 ContactsContract.PhoneLookup.DISPLAY_NAME 的值是“display_name”,它存在于结果集中。
ContactsContract.PhoneLookup.NUMBER 是使用ContactsContract.Contacts.CONTENT_URI
您可以先使用以下代码检查它将返回哪些列。
if(people!=null){
String[] colNames = people.getColumnNames();
for(int i=0;i<colNames.length;i++)
Log.i("",colNames[i]);
}
也可以通过移动光标来检查 PhoneLookup 的文档(使用intellij :))
顺便说一下:
*表示查找电话号码的结果的表格,例如来电者ID。至 执行查找时,您必须将要查找的号码附加到CONTENT_FILTER_URI。这个查询 高度优化。 Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phoneNumber)); resolver.query(uri,new String [] {PhoneLookup.DISPLAY_NAME,...
<强>列强> PhoneLookup String NUMBER只读电话号码。 String TYPE只读电话号码类型。 请参阅CommonDataKinds.Phone。 String LABEL只读电话号码的自定义标签。看到 CommonDataKinds.Phone。 Contacts表中的列也可通过连接获得。加入联系人长_ID阅读 - 只有联系人ID。 String LOOKUP_KEY只读请参阅ContactsContract.Contacts String DISPLAY_NAME只读请参阅ContactsContract.Contacts long PHOTO_ID只读请参阅 ContactsContract.Contacts。 int IN_VISIBLE_GROUP只读请参阅ContactsContract.Contacts。 INT HAS_PHONE_NUMBER只读请参阅ContactsContract.Contacts。 int TIMES_CONTACTED只读 请参阅ContactsContract.Contacts。 long LAST_TIME_CONTACTED只读请参阅 ContactsContract.Contacts。 int STARRED只读请参阅ContactsContract.Contacts。串 CUSTOM_RINGTONE只读请参阅ContactsContract.Contacts。 int SEND_TO_VOICEMAIL只读 请参阅ContactsContract.Contacts。*