java.lang.reflect.InvocationTargetException при отключении вызова в Android 7.1.1
Я использую следующий код для отключения вызова, он не отключается после обновления Android до 7.1.1, и я получаю: "java.lang.SecurityException: разрешение MODIFY_PHONE_STATE" требуется исключение.
String serviceManagerName = "android.os.ServiceManager";
String serviceManagerNativeName = "android.os.ServiceManagerNative";
String telephonyName = "com.android.internal.telephony.ITelephony";
Class<?> telephonyClass;
Class<?> telephonyStubClass;
Class<?> serviceManagerClass;
Class<?> serviceManagerNativeClass;
Method telephonyEndCall;
Object telephonyObject;
Object serviceManagerObject;
telephonyClass = Class.forName(telephonyName);
telephonyStubClass = telephonyClass.getClasses()[0];
serviceManagerClass = Class.forName(serviceManagerName);
serviceManagerNativeClass = Class.forName(serviceManagerNativeName);
Method getService = // getDefaults[29];
serviceManagerClass.getMethod("getService", String.class);
Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class);
Binder tmpBinder = new Binder();
tmpBinder.attachInterface(null, "fake");
serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone");
Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class);
telephonyObject = serviceMethod.invoke(null, retbinder);
telephonyEndCall = telephonyClass.getMethod("endCall");
telephonyEndCall.invoke(telephonyObject);
У меня есть все разрешение на вызов, он работает в зефир.
1 ответ
InvocationTargetException
брошен, потому что Reflection оборачивает любой другой Exception
в базовом методе в этот класс. Попробуйте поместить весь код в блок try/catch и распечатать трассировку стека с помощью e.printStackTrace()
, Должна быть строка "Причины:", которая, надеюсь, укажет вам правильное направление.
РЕДАКТИРОВАТЬ: В качестве альтернативы вы можете использовать e.getCause()
метод, чтобы получить основной Exception
, e
здесь ловится исключение / бросок.