第一步:在AndroidManifest.xml中,必须配置权限,
权限需要写在application外面,不然获取不到项目的权限
//获取数据电话的状态
<uses-permission android:name="android.permission.READ_PHONE_STATE"
></uses-permission>
>
//获取数据电话是否是打电话的状态
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
//需要配一下MyPhone类
<receiver android:name=".MyPhone">
<intent-filter
android:priority="1000"
>
<action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
第二步:写个类MyPhone继承BroadcastReceiver,通过onReceive方法来进行数据传值,可以获取得到TelephonyManager.getITelephny方法的Method对象,在 调用getITelephny方法发挥ITelephny对象,结果进行判断。
public class MyPhone extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if("android.intent.action.PHONE_STATE".equals(intent.getAction())){
TelephonyManager telephonyManager= (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
int state=telephonyManager.getCallState();
switch(state){
case TelephonyManager.CALL_STATE_RINGING:
//得到电话号码
String number=intent.getStringExtra("incoming_number");
Log.i("test",""+number);
//获取得到TelephonyManager.getITelephny方法的Method对象
Class<TelephonyManager> telephonyManagerClass=TelephonyManager.class;
try {
//调用getITelephny方法发挥ITelephny对象
Method method=telephonyManagerClass.getDeclaredMethod("getITelephony",null);
//允许访问私有方法
method.setAccessible(true);
ITelephony telephony= (ITelephony) method.invoke(telephonyManager,null);
//挂断谁的电话
if("15116396472".equals(number)) {
telephony.endCall();
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
}
//一些基本用法的图片