У меня есть приложение, которое использует следующий код для блокировки вызовов:
TelephonyManager telephonyManager =
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
try {
Class<?> telephonyManagerClass =
Class.forName(telephonyManager.getClass().getName());
Method getITelephonyMethod =
telephonyManagerClass.getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);
Object iTelephony = getITelephonyMethod.invoke(telephonyManager);
Class<?> iTelephonyClass = Class.forName(iTelephony.getClass().getName());
Method endCallMethod = iTelephonyClass.getDeclaredMethod("endCall");
endCallMethod.setAccessible(true);
endCallMethod.invoke(iTelephony);
} catch (ClassNotFoundException e) {
// ClassNotFoundException
} catch (NoSuchMethodException e) {
// NoSuchMethodException
} catch (IllegalAccessException e) {
// IllegalAccessException
} catch (InvocationTargetException e) {
// InvocationTargetException
} catch (Exception e) {
// Some other exception
}
Для работы требуется android.permission.MODIFY_PHONE_STATE в AndroidManifest.xml.В Android M и N мне также пришлось запросить у пользователя разрешение Manifest.permission.CALL_PHONE.
Но теперь в Android 8 / Android O вышеприведенный код завершается ошибкой с InvocationTargetException: требуется разрешение MODIFY_PHONE_STATE
Я нашел этот связанный пост StackOverflow: Android - почему метод endCall работает, но answerRingingCall не работает?
Здесь предлагается использовать отражение в PhoneInterfaceManager (вместо ITelephony, как я это делал выше), и используйте закрытый метод sendRequestAsync (команда int) с командой end call, и тем самым обойдя меру безопасности внутри метода endCall ().
Имеет кого-нибудьпробовал что то подобное?Является ли это возможным?Как бы я даже получил объект / класс PhoneInterfaceManager вместо ITelephony?
Я думаю, что это исходный код: https://android.googlesource.com/platform/packages/services/Telephony/+/oreo-release/src/com/android/phone/PhoneInterfaceManager.java
Я не вижу никакой разницы между этим икод для Android N, когда дело доходит до завершения звонка, поэтому я могу ошибаться: https://android.googlesource.com/platform/packages/services/Telephony/+/nougat-release/src/com/android/phone/PhoneInterfaceManager.java