利用广播监听电话的状态。
Myreceiver.java:
public void onReceive(Context context, Intent intent) { // 通过一下代码可以获得到系统中控制电话状态的键 System.out.println(intent.getExtras().keySet()); String state = intent.getExtras().getString("state"); String incoming_number = intent.getExtras() .getString("incoming_number"); System.out.println("电话状态:" + state + "电话号码:" + incoming_number); if ("15204657729".equals(incoming_number)) { TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); try { Method getITelephonyMethod = TelephonyManager.class .getDeclaredMethod("getITelephony");// 强行调用getITelephony()方法。这里可以通过getDeclaredMethod获得TelephonyManager类中 // 的所有方法进行使用 getITelephonyMethod.setAccessible(true); Object endCallMethod = getITelephonyMethod.invoke(tm); Method endcall = endCallMethod.getClass().getMethod("endCall"); endcall.invoke(endCallMethod); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } }
配置文件:
广播注册:
<receiver android:name="Myreceiver"> <intent-filter > <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver>
权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE"/>