Альтернатива TelephonyManager для завершения вызова



Я использовал приведенный ниже код для завершения вызова. Но теперь на Oreo, я получаю ошибку, которая утверждает, что разрешение MODIFY_PHONE_STATE требуется и, следовательно, этот код больше не работает.



  TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

// Toast.makeText(context, "here", Toast.LENGTH_LONG).show();
assert telephonyManager != null;
Class clazz = Class.forName(telephonyManager.getClass().getName());
Method method = clazz.getDeclaredMethod("getITelephony");
method.setAccessible(true);
ITelephony telephonyService;
telephonyService = (ITelephony) method.invoke(telephonyManager);
telephonyService.silenceRinger();
telephonyService.endCall();


Кроме того, согласно документам и многим блогам, разрешение MODIFY_PHONE_STATE действительно только для системных приложений.

Так как же мы теперь будем заканчивать звонки в будущем?

Есть ли другой путь?

Ошибка:



java.lang.SecurityException: MODIFY_PHONE_STATE permission required.
at android.os.Parcel.readException(Parcel.java:2004)
at android.os.Parcel.readException(Parcel.java:1950)
W/System.err: at com.android.internal.telephony.ITelephony$Stub$Proxy.endCall(ITelephony.java:2025)
355   1  

1 ответ:

Google накладывает множество ограничений на то, что приложение может делать и не может. Даже если вам удалось найти какую-то внутреннюю реализацию и вызвать через отражение, это не поможет от Anddoid P, который имеет усовершенствованный механизм для блокирования этих попыток.

Единственный выход-это создать свое собственное приложение для звонков, которое даст вам полный контроль над управлением звонками. Вы можете следовать этому официальному документу, который описывает процесс создания приложения

Comments

    Ничего не найдено.