1.创建aidl文件夹,把监听电话状态的两个包复制到aidl文件夹里,android.telephony,com.android.internal.telephony,这两个包可以去官网下载,没有的可以找我要。
2.PhoneMonitor
public class PhoneMonitor extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// Log.i("test","有电话进来了:");
if ("android.intent.action.PHONE_STATE".equals(intent.getAction())){
//获取号码
//电话管理者
TelephonyManager telephonyManager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//得到电话的状态
int state=telephonyManager.getCallState();
// Log.i(“test”,”有电话进来了:”+number);
// Toast.makeText(context, “电话进来了:”+number, Toast.LENGTH_SHORT).show();
switch (state){
case TelephonyManager.CALL_STATE_RINGING:
//得到电话号码
String number=intent.getStringExtra("incoming_number");
//得到电话管理者类对象
Class<TelephonyManager> clazz=TelephonyManager.class;
// TelephonyManager telephonyManager=(TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
try {
Method method = clazz.getDeclaredMethod("getITelephony",null);
//设置可访问
method.setAccessible(true);
//执行方法
ITelephony iTelephony = (ITelephony)method.invoke(telephonyManager,null);
//根据设置的黑名单号码与得到的电话号码做判断
if ("15116396472".equals(number)){
//如果是就挂断
iTelephony.endCall();
Log.i("test","来电了"+number);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
// Log.i("test","来电话了");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.i("test","通话中");
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.i("test","挂断");
break;
}
}
}
}
3.AndroidManifest.xml
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<receiver android:name=".PhoneMonitor">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>