繁体   English   中英

Android:检查联系人列表中的电话号码? (电话号码从电话中检索)

[英]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>
  1. 如何检查收到的电话号码是否在我的联系人列表中?
    您有什么提示可以在不加载联系人列表的情况下知道此电话号码是否存在于联系人列表中?
    我不想要更多信息,只要这个电话号码存在。

  2. 如果不可能,我必须加载联系人列表,如何在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)

我的设备上的问题例如在以下情况下发生:

  1. 切换到飞行模式
  2. 使用默认消息应用程序发送短信(将排队)。
  3. 使用PhoneLookup.CONTENT_FILTER_URI查询联系人

并非所有设备似乎都受到影响

使用PhoneLookup.CONTENT_FILTER_URI返回的游标始终为空。 使用Phone.CONTENT_FILTER_URI一切正常(如果有的话,您可以找到联系人)。

因此,我建议您始终使用Phone.* Uris,除非您确实需要使用PhoneLookup.* ... 这通常只是与地址簿同步相关的东西(而且大多数时候不是您感兴趣的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM