写点什么

安卓移动软件开发:手机防火墙的实现

用户头像
Android架构
关注
发布于: 刚刚

PhoneStateListener: 电话状态监听器


onCallStateChanged(int state, String incomingNumber): 状态改变的回调方法


TelephonyManager.CALL_STATE_IDLE : 空闲状态


TelephonyManager.CALL_STATE_RINGING : 拨入状态


TelephonyManager.CALL_STATE_OFFHOOK : 通话状态


另:因为安卓没有公开结束通话的 API,如果需要结束通话,必须使用 AIDL 与电话管理服务进行通信,并调用服务中的 API 实现结束通话。


五、代码实现


1.ListenCallService


package com.example.appservice;


import java.lang.reflect.Method;


import com.android.internal.telephony.ITelephony;


import android.app.Service


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


;


import android.content.Context;


import android.content.Intent;


import android.os.IBinder;


import android.telephony.PhoneStateListener;


import android.telephony.TelephonyManager;


import android.util.Log;


public class ListenCallService extends Service {


private TelephonyManager tm;


private PhoneStateListener listener = new PhoneStateListener() {


// 当通话状态发生改变时调用


public void onCallStateChanged(int state, String incomingNumber) {


switch (state) {


case TelephonyManager.CALL_STATE_IDLE:// 空闲(挂断电话/未来电之前)


Log.e("TAG", "空闲(挂断电话/未来电之前)");


break;


case TelephonyManager.CALL_STATE_RINGING:// 响铃


Log.e("TAG", "响铃");


// 如果来电是黑名单号(110),就挂断电话


if ("110".equals(incomingNumber)) {


try {


endCall();


} catch (Exception e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


}


break;


case TelephonyManager.CALL_STATE_OFFHOOK:// 接通


Log.e("TAG", "接通");


break;


default:


break;


}


}


};


@Override


public IBinder onBind(Intent intent) {


// TODO Auto-generated method stub


return null;


}


/*


  • 挂断电话


*/


private void endCall() throws Exception {


// 通过反射调用隐藏的 API


// 得到隐藏类的 Class 对象


Class c = Class.forName("android.os.ServiceManager");


// 得到方法所对应的 Method 对象


Method method = c.getMethod("getService", String.class);


// 调用方法


IBinder iBinder = (IBinder) method.invoke(null,


Context.TELEPHONY_SERVICE);


// 得到接口对象


ITelephony telephony = ITelephony.Stub.asInterface(iBinder);


// 结束通话


telephony.endCall();


}


@Override


public void onCreate() {


// TODO Auto-generated method stub


super.onCreate();


// 得到电话管理器


tm = (TelephonyManager) this


.getSystemService(Context.TELEPHONY_SERVICE);


// 监听电话状态


tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);


}


@Override


public void onDestroy() {


// TODO Auto-generated method stub


super.onDestroy();


// 停止电话监听


tm.listen(listener, PhoneStateListener.LISTEN_NONE);


}


}


2.黑名单拦截功能的开关


<span style="white-space:pre"> </span>public void startListenCall(View v){


startService(new Intent(this, ListenCallService.class));


}


public void stopListenCall(View v){


stopService(new Intent(this, ListenCallService.class));


}


3.注册 Service

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
安卓移动软件开发:手机防火墙的实现