Я собираюсь использовать метод 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?