我将使用 ITelephony.aidl 的 endCall 方法以编程方式断开所有传入呼叫。
这是我的广播接收器:
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();
}
我在 Manifest 中声明了 Service 和 BroadcastReceiver。
当我运行项目并连接调用时,出现以下错误:
java.lang.NullPointerException: null receiver
在这一行:
IBinder binder = (IBinder) m.invoke(null, new Object[]{TELEPHONY_SERVICE});
我怎样才能解决这个问题,以在android中以编程方式阻止所有来电?