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

时间:2010-08-17 18:51:25

标签: android contacts broadcastreceiver

我让BroadcastReceiver接收给我打电话的人的电话号码

<intent-filter>
<action
    android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
  1. 如何检查电话号码是否在我的联系人列表中? 您是否有提示知道这个电话号码是否存在于联系人列表中且没有加载联系人列表? 我不想要更多信息,只要这个电话号码存在。

  2. 如果不可能,我必须加载联系人列表,如何在BroadcastReceiver上执行此操作? 当我尝试getContentResolver时,它无效,因为我在BroadcastReceiver而不在Activity内...

  3. 感谢您的帮助

4 个答案:

答案 0 :(得分:33)

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()) {
      return true;
}
} finally {
if (cur != null)
   cur.close();
}
return false;
}

答案 1 :(得分:9)

我认为您需要在清单文件中添加以下内容非常重要。

<uses-permission android:name="android.permission.READ_CONTACTS" /> 

答案 2 :(得分:3)

为1,您应该查看推荐的ContactsContract.PhoneLookup提供商

表示查找电话号码的结果的表格,例如来电者ID。要执行查找,您必须将要查找的数字附加到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
}

for 2你可以使用onReceive方法中的context来调用属于Context的方法

ContentResolver cr=context.getContentResolver();

答案 3 :(得分:3)

我建议您使用Phone.CONTENT_FILTER_URI代替PhoneLookup.CONTENT_FILTER_URI 因为PhoneLookup可能是空的,你不会得到任何结果(在LG-P500上测试,froyo)

我的设备上的问题发生在例如:

  1. 切换到飞行模式
  2. 使用默认消息应用程序发送短信(将排队)。
  3. 使用PhoneLookup.CONTENT_FILTER_URI查询联系人
  4. 并非所有设备似乎都受到影响

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

    因此我建议你总是使用Phone.* Uris,除非你真的需要使用PhoneLookup.* ...这通常只是地址簿同步相关的东西(而且大部分时间都不是你的有兴趣)。

相关问题