Как заблокировать вызов в Android Nougat, Oreo и выше программно?

Этот код работает нормально до Android 6 (Зефир):

TelephonyManager tm = (TelephonyManager) context
        .getSystemService(Context.TELEPHONY_SERVICE);
Class c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
Object telephonyService = m.invoke(tm); 
c = Class.forName(telephonyService.getClass().getName()); 
m = c.getDeclaredMethod("endCall"); 
m.setAccessible(true); 
m.invoke(telephonyService);

После прочтения документации

я звонил endCall(context, number) все еще, Невозможно заблокировать вызов. Нужны рабочие решения в Android Nougat, Oreo, Pie и выше.

Обновить

Я включил следующий код из официальной документации Nougat, но номер не был добавлен в черный список.

Cursor c = mContext.getContentResolver().query(BlockedNumberContract.BlockedNumbers.CONTENT_URI,
                    new String[]{BlockedNumberContract.BlockedNumbers.COLUMN_ID,
                            BlockedNumberContract.BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
                            BlockedNumberContract.BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);

0 ответов

Android 9 не может использовать интерфейсы без SDK

Android 9 вводит новые ограничения на использование не SDK-интерфейсов, будь то напрямую, через отражение или через JNI. Эти ограничения применяются всякий раз, когда приложение ссылается на интерфейс не SDK или пытается получить его дескриптор, используя отражение или JNI.

И похоже, что вы не можете читать или писать в BlockedNumberContract если это не системное приложение или номеронабиратель по умолчанию или приложение смс по умолчанию

права доступа

Только система, приложение SMS по умолчанию и телефонное приложение по умолчанию (см. TelecomManager.getDefaultDialerPackage()), а также приложения-операторы (см. CarrierService) могут читать и писать поставщику заблокированных номеров. Однако canCurrentUserBlockNumbers(Context) может быть доступен любому приложению.

Другие вопросы по тегам