[英]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.