Android: проверьте номер телефона в списке контактов? (Номер телефона получен из телефонного звонка)
Я делаю BroadcastReceiver
для получения номера телефона человека, который звонит мне
<intent-filter>
<action
android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
-
Как проверить, принимается ли номер телефона в моем списке контактов?
У вас есть подсказка, чтобы узнать, существует ли этот номер телефона в списке контактов без загрузки списка контактов?
Я не хочу больше информации, только если этот номер телефона существует.
-
Если это невозможно, и я должен загрузить список контактов, как это сделать на BroadcastReceiver
?
Когда я пытаюсь сделать getContentResolver
, он не работает, потому что я нахожусь на BroadcastReceiver
и не внутри Activity
...
Спасибо за помощь
Ответы
Ответ 1
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;
}
Ответ 2
Я думаю, что важно сказать, что вам нужно добавить следующее в файл манифеста.
<uses-permission android:name="android.permission.READ_CONTACTS" />
Ответ 3
для 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 вы можете использовать context
из метода onReceive для вызова методов, относящихся к Context
ContentResolver cr=context.getContentResolver();
Ответ 4
Я предлагаю вам использовать Phone.CONTENT_FILTER_URI
вместо PhoneLookup.CONTENT_FILTER_URI
потому что PhoneLookup может быть пустым, и вы не получите никакого результата время от времени (проверено на LG-P500, froyo)
Проблема на моем устройстве происходит, например, когда:
- переход в режим самолета
- используйте приложение сообщения по умолчанию для отправки sms (будет поставлено в очередь).
- используйте
PhoneLookup.CONTENT_FILTER_URI
для запроса контакта
Не все устройства, по-видимому, затронуты
Используя PhoneLookup.CONTENT_FILTER_URI
, возвращаемый курсор всегда пуст.
Используя Phone.CONTENT_FILTER_URI
все в порядке (вы найдете контакт, если есть).
Поэтому я предлагаю вам всегда использовать Phone.*
Uris, за исключением случаев, когда вам действительно нужно использовать PhoneLookup.*
... Обычно это всего лишь связанная с синхронизацией адресная книга (и в большинстве случаев это не то, что вас интересует).