Необходимо внедрить функцию «Call End» в моем приложении - PullRequest
0 голосов
/ 13 июня 2019

Я разрабатываю «DemoApp», в котором я сделал кнопку «Завершить вызов», когда любой входящий вызов приходит на мой телефон, я только что получил его с помощью приложения для набора номера по умолчанию, а затем я открываю «DemoApp» и когда я нажимаю кнопку «Завершить звонок», я просто хочу завершить входящий звонок.

Я успешно выполнил функцию «Завершить вызов» с помощью следующего кода:

private boolean declinePhone() {
    try {
        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);
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        Log.d("unable", "msg cant dissconect call....");
    }
    return false;
}

Я просто хочу узнать, смогу ли я достичь этого с помощью API "ConnectionService". Я изучил "https://developer.android.com/guide/topics/connectivity/telecom/selfManaged'", эта статья дает мне решение для разработки моего собственного "приложения для набора номера", но я не хочу делать свою собственную программу набора номера.

1 Ответ

0 голосов
/ 27 июня 2019

Точно так же, как вы и подозревали, есть два варианта:

  1. Создайте полноценное приложение для вызова (ваш собственный пользовательский интерфейс вызова, собственную обработку уведомлений о вызовах и т. Д.), А затем выможете использовать хороший Call.disconnect() API
  2. Используйте код взлома, который вы опубликовали.
...