Android: Проверить номер телефона в списке контактов? (Номер телефона извлекается из телефонного звонка)

Я создаю BroadcastReceiver для получения номера телефона человека, который мне звонит

<intent-filter>
<action
    android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
  1. Как проверить, есть ли полученный номер телефона в моем списке контактов ?
    У вас есть совет, чтобы узнать, существует ли этот номер телефона в списке контактов без загрузки списка контактов?
    Мне не нужна дополнительная информация, только если этот телефонный номер существует.

  2. Если это невозможно, и я должен загрузить список контактов, как это сделать в BroadcastReceiver ?
    Когда я пытаюсь сделать getContentResolver , он не работает, потому что я нахожусь на BroadcastReceiver , а не на Activity ...

Спасибо за вашу помощь

17
задан sorosh_sabz 1 December 2016 в 21:39
поделиться

2 ответа

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;
}
35
ответ дан 30 November 2019 в 10:43
поделиться

для 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();
3
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: