我目前正在获取只读的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卡通讯录呢?
谢谢你抽出时间。
2条答案
按热度按时间5n0oy7gb1#
你正在阅读的联系人来自联系人提供程序,该程序是Android平台的一部分。它们不是只读的,但你应该在尝试更改它们之前阅读文档。
SIM卡通讯录则完全不同。它们单独存储在SIM卡上,你可能需要使用手机制造商或服务提供商的应用程序才能访问它们。它们与谷歌通讯录无关。我建议不要使用它们。
pxiryf3j2#
首先,为每个联系人运行电话查询是非常低效的,可能会导致代码在具有大量联系人的设备上运行几分钟(!!)。
下面的代码可以通过一次快速查询获得您需要的所有信息:
关于SIM卡联系人,他们已经存储在同一个数据库中,并可通过ContactsContract访问,这意味着存储在SIM卡上的所有电话也应该与上述代码一起接收。
如果你想查询SIM卡联系人只看到我的答案在这里:https://stackoverflow.com/a/49624417/819355