[英]Android : Check phone number present in Contact List ? (Phone number retrieve from phone call)
我制作了一个BroadcastReceiver
来接收给我打电话的人的电话号码
<intent-filter>
<action
android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
如何检查收到的电话号码是否在我的联系人列表中?
您有什么提示可以在不加载联系人列表的情况下知道此电话号码是否存在于联系人列表中?
我不想要更多信息,只要这个电话号码存在。
如果不可能,我必须加载联系人列表,如何在BroadcastReceiver
上执行此操作?
当我尝试执行getContentResolver
,它不起作用,因为我在BroadcastReceiver
而不是在Activity
...
谢谢你的帮助
public boolean contactExists(Context context, String number) {
/// number is the phone number
Uri lookupUri = Uri.withAppendedPath(
PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(number));
String[] mPhoneNumberProjection = { PhoneLookup._ID, PhoneLookup.NUMBER, PhoneLookup.DISPLAY_NAME };
Cursor cur = context.getContentResolver().query(lookupUri,mPhoneNumberProjection, null, null, null);
try {
if (cur.moveToFirst()) {
cur.close();
return true;
}
} finally {
if (cur != null)
cur.close();
}
return false;
}
我认为重要的是说您需要在清单文件中添加以下内容。
<uses-permission android:name="android.permission.READ_CONTACTS" />
对于 1 你应该看看推荐的ContactsContract.PhoneLookup provider
表示查找电话号码的结果的表格,例如来电显示。 要执行查找,您必须将要查找的数字附加到 CONTENT_FILTER_URI。 这个查询是高度优化的。
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Cursor mycursor=resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
if (mycursor!=null && mycursor.moveToFirst()) {
// record exists
}
对于 2,您可以使用 onReceive 方法中的context
来调用属于 Context 的方法
ContentResolver cr=context.getContentResolver();
我建议你使用Phone.CONTENT_FILTER_URI
而不是PhoneLookup.CONTENT_FILTER_URI
因为 PhoneLookup 可以为空并且你有时不会得到结果(在 LG-P500 上测试,froyo)
我的设备上的问题例如在以下情况下发生:
PhoneLookup.CONTENT_FILTER_URI
查询联系人并非所有设备似乎都受到影响
使用PhoneLookup.CONTENT_FILTER_URI
返回的游标始终为空。 使用Phone.CONTENT_FILTER_URI
一切正常(如果有的话,您可以找到联系人)。
因此,我建议您始终使用Phone.*
Uris,除非您确实需要使用PhoneLookup.*
... 这通常只是与地址簿同步相关的东西(而且大多数时候不是您感兴趣的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.