android - 如何使用 Data.HAS_PHONE_NUMBER

标签 android android-contentprovider android-contacts

我对如何使用 Data.HAS_PHONE_NUMBER 有点困惑。 我已经插入了联系人以及一些额外的数据,我想检索其中的一些联系人。

如果我运行以下代码,一切都很好:

Uri uri = Data.CONTENT_URI;
String[] projection = new String[]{Data.CONTACT_ID, Data.DISPLAY_NAME };
String selection = Data.DATA4+" = ?";
String[] selectionArgs = new String[] {MY_VALUE};


Cursor truContactCursor = mContext.getContentResolver().query(uri, projection, selection, selectionArgs, null);

现在,我想知道这些联系人是否有电话号码,所以我将 HAS_PHONE_NUMBER 添加到投影中,如下所示:

String[] projection = new String[]{Data.CONTACT_ID, Data.DISPLAY_NAME, Data.HAS_PHONE_NUMBER };

运行查询时,我得到以下执行:

java.lang.IllegalArgumentException: Invalid column has_phone_number

为什么我无法访问 HAS_PHONE_NUMBER?在同一张表中的 Data.DISPLAY_NAME 没有问题。那么我们应该如何使用 Data.HAS_PHONE_NUMBER?

感谢您的回答

最佳答案

使用 HAS_PHONE_NUMBER 用于检查联系人是否至少有一个电话号码。示例:

ContentResolver cr = getContentResolver();  
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if(cursor.getCount()>0){
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));id
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if(cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))>0){
//Query phone here. 
}

或加入投影:

String [] projection = {ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER}; 

关于android - 如何使用 Data.HAS_PHONE_NUMBER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722531/

相关文章:

android - ContactsContract.Contacts 默认是空的吗?

android - 如何检查从具有多个联系人的用户联系人中删除了哪个号码?

android - 在 webview 中显示自动对焦键盘

由应用程序组成的 Android 应用程序 (android-maven)

android - Android Content Provider 权限定义是否违反了 DRY 规则?

java - 应用程序读取错误短信

android - 如何在 android 中使用 bulkInsert() 函数?

Java,根据所选州获取城市

android - 从 Gradle 到 IntelliJ 中的标准 Android 项目

java - 如何将android联系人访问到数组中