Я создаю 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()) {
return true;
}
} finally {
if (cur != null)
cur.close();
}
return false;
}
для 1 вам следует взглянуть на рекомендованного поставщика ContactsContract.PhoneLookup
Таблица, которая представляет результат поиска телефонного номера, например для идентификатора вызывающего абонента. Чтобы выполнить поиск, вы должны добавить номер, который хотите найти, в 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 для вызова методов, принадлежащих контексту
ContentResolver cr=context.getContentResolver();