Как заблокировать вызов в 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) может быть доступен любому приложению.