Отключить входящий звонок программно в андроиде Nougat Api 24 - PullRequest
0 голосов
/ 12 июня 2018

Я собираюсь использовать метод endCall в ITelephony.aidl для программного отключения всех входящих вызовов.

Это мой BroadcastReceiver:

public class CallBlocker extends BroadcastReceiver {

String number;

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction() != null && intent.getAction().equals("android.intent.action.PHONE_STATE")) {
        disconnectIncomingCall(context);
    }
}

private void disconnectIncomingCall(Context context) {
    ITelephony telephonyService;
    TelephonyManager telephony = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
    try {
        Class c = Class.forName(telephony.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        IBinder binder = (IBinder) m.invoke(null, new Object[]{TELEPHONY_SERVICE});
        telephonyService = ITelephony.Stub.asInterface(binder);
        telephonyService.endCall();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

И это мой сервис:

public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return new ITelephony.Stub() {
        @Override
        public boolean endCall() throws RemoteException {
            return false;
        }

        @Override
        public void answerRingingCall() throws RemoteException {

        }

        @Override
        public void silenceRinger() throws RemoteException {

        }
    };
}
}

А это файл ITelephony.aidl:

package com.android.internal.telephony;

interface ITelephony {

boolean endCall();

void answerRingingCall();

void silenceRinger();

}

И я объявил Service и BroadcastReceiver в Manifest.

Когда я запускаю проект и подключаю вызов,Я получаю эту ошибку:

java.lang.NullPointerException: null receiver

В этой строке:

IBinder binder = (IBinder) m.invoke(null, new Object[]{TELEPHONY_SERVICE});

Как решить эту проблему, чтобы программно заблокировать все входящие вызовы в Android?

...