我目前只读android联系人,下面是我使用的代码:
String[] projecao = new String[] { Contacts._ID,
Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME };
String selecao = Contacts.HAS_PHONE_NUMBER + " = 1";
Cursor contatos = contexto.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, projecao, selecao, null, null);并获取电话号码:
Cursor phones = contexto.getContentResolver().query(
Phone.CONTENT_URI,
new String[] { Phone.NUMBER },
Phone.CONTACT_ID + " = ?",
new String[] { contatos.getString(contatos
.getColumnIndex(Contacts._ID)) }, null);我想维护一个数据库的所有联系人与数字。
我要怎么做才能同时获得SIM卡联系人?
谢谢您抽时间见我。
发布于 2012-11-27 08:37:30
您正在阅读的联系人来自联系人提供商,该提供商是Android平台的一部分。它们不是只读的,尽管您应该在尝试更改它们之前阅读文档。
SIM卡联系人是完全不同的。它们被单独存储在SIM卡上,你可能必须使用手机制造商或服务提供商的应用程序才能访问它们。他们与谷歌的联系人没有任何关系。我建议不要用它们做任何事情。
发布于 2021-04-18 15:47:01
首先,为每个联系人运行电话查询效率非常低,可能会导致代码运行几分钟(!!)在有很多联系人的设备上。
以下代码将通过一个快速查询获得所需的所有信息:
class Contact {
Long id;
String name;
String lookupKey;
List<String> phones = new ArrayList<>();
public Contact(Long id, String name, String lookupKey, String number) {
this.id = id;
this.name = name;
this.lookupKey = lookupKey;
this.phones.add(number);
}
}
Map<Long, Contact> contacts = new HashMap<Long, PhoneContact>();
String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.LOOKUP_KEY, Phone.NUMBER};
String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "')";
Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null);
while (cur.moveToNext()) {
long id = cur.getLong(0);
String name = cur.getString(1);
String lookup = cur.getString(2);
String number = cur.getString(3)
if (!contacts.containsKey(id)) {
Contact newContact = new Contact(id, name, lookup, number);
contacts.put(id, phoneContact);
} else {
Contact existingContact = contacts.get(id);
existingContact.phones.add(number);
}
}
cur.close();关于SIM卡联系人,他们已经存储在相同的数据库中,并可通过ContactsContract访问,这意味着存储在SIM卡上的所有电话也应该与上述代码一起接收。
如果您只想查询SIM卡联系人,请查看此处的答案:https://stackoverflow.com/a/49624417/819355
https://stackoverflow.com/questions/13575286
复制相似问题