Как заблокировать входящие по подстроке идентификатора?
Когда звонят, стандартный гугловский dialer отображает латиницей название организации. Вроде как, это называется "CNAP (Calling Name Presentation)", но я не уверен. Звонок маркирован, хорошо, но что дальше? Мне бы хотелось, чтобы он не проходил по наличию подстроки в названии, например, "bank".
Важно, что стандартный гугловский dialer отображает название организации в оффлайне. И блокировка тоже должна работать в оффлайне. Как этого добиться?
Я мельком почитал, там, типа, есть какой-то CallScreeningService API. В деталях не разбирался, прошу совета.
CallScreeningService работает не так просто как кажется: в onScreenCall() приходит урезанный Call.Details, только номер (handle) и служебные поля, getCallerDisplayName() там пустой.
Название организации, которое рисует гугловский dialer, это его собственный Business Caller ID, не CNAM, и публичного API к нему нет — так что фильтровать офлайн по подстроке названия не выйдет.
Рабочий вариант: свой CallScreeningService, номер из callDetails.getHandle(), сверка со своей локальной базой номер→категория, по совпадению "bank" в имени зовёшь respondToCall с setDisallowCall(true).
ImagineTables, необязательно с нуля — можно взять готовые базы спам-номеров и просто периодически обновлять локальный снэпшот, дальше в CallScreeningService матчишь номер офлайн без всякого Business Caller ID API.
Я сделал через AccessibilityService - смотрит на экран когда звонок, читает текст и сверяет с черным списком. Пока проверяю на моем samsung s24 ultra. если все будет четко то выложу на 4pda