黑名单来电自动挂断
来源:互联网 发布:怎么word数据导入excel 编辑:程序博客网 时间:2024/05/04 16:55
在监听手机来电一文中,已经实现了监听手机来电的功能,本文在此基础上,增加黑名单来电自动挂断的功能,不幸的是,Android没有对外公开挂断电话的API,如果需要挂断电话,必须使用AIDL与电话管理服务进行通信,并调用服务中的API实现结束通话。为了调用远程的AIDL Service,需要将Android源代码中的如下两个文件复制到项目的相应位置:
com.android.internal.telephony包下的ITelephony.aidl
android.telephony包下的NeighboringCellInfo.aidl
开发者需要在项目中建立对应的包,然后将这两个文件复制到相应的包下。ADT会在根目录下自动生成源文件。
接下来就可以使用ITelephony的endCall方法来挂断电话了。代码如下:
package com.guyun.activity;import java.lang.reflect.Method;import java.util.ArrayList;import com.android.internal.telephony.ITelephony;import android.app.Activity;import android.os.Bundle;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class MainActivity extends Activity {// 记录黑名单的集合ArrayList<String> blockList = new ArrayList<String>();// 声明电话管理器对象TelephonyManager tManager;// 声明监听通话状态的监听器CustomPhoneCallListener cpListener;public class CustomPhoneCallListener extends PhoneStateListener {@Overridepublic void onCallStateChanged(int state, String incomingNumber) {switch (state) {case TelephonyManager.CALL_STATE_IDLE:break;case TelephonyManager.CALL_STATE_OFFHOOK:break;case TelephonyManager.CALL_STATE_RINGING:// 如果该号码属于黑名单if (isBlock(incomingNumber)) {try {Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);// 获取远程TELEPHONY_SERVICE的IBinder对象的代理IBinder binder = (IBinder) method.invoke(null,new Object[] { TELEPHONY_SERVICE });// 将IBinder对象的代理转换为ITelephony对象ITelephony telephony = ITelephony.Stub.asInterface(binder);// 挂断电话telephony.endCall();} catch (Exception e) {e.printStackTrace();}}break;}super.onCallStateChanged(state, incomingNumber);}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 初始化黑名单集合initBlockList();// 获取系统的TelephonyManager管理器tManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);cpListener = new CustomPhoneCallListener();// 通过TelephonyManager监听通话状态的改变tManager.listen(cpListener, PhoneStateListener.LISTEN_CALL_STATE);}/** * 初始化黑名单集合 */private void initBlockList() {blockList.add("15402817757");blockList.add("15680768382");blockList.add("15680768383");blockList.add("15680768284");blockList.add("15680768385");blockList.add("15680768386");blockList.add("15680768387");blockList.add("15680768388");blockList.add("15680768389");}/** * 判断某个电话号码是否在黑名单之内 * * @param phone * 来电号码 * @return */public boolean isBlock(String phone) {for (String s1 : blockList) {if (s1.equals(phone)) {return true;}}return false;}}
加上权限:
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
注意:本文只是简单地初始化黑名单,此示例可以做如下改进:
1、黑名单来源应该从系统联系人中选取,即需要读取系统联系人,以ListView形式显示出来并提供复选框供用户选择。
2、选择的黑名单可以保存在文件或数据库中,当然判断某个号码是否为黑名单也是根据此文件或数据库,这样即使程序退出,手机关机,黑名单也不会消失。
3、添加黑名单可以在Activity实现,而监听来电和挂断黑名单可以在后台Service实现,并随系统开机而自动运行。- 黑名单来电自动挂断
- 黑名单来电自动挂断
- Service-黑名单来电自动挂断
- 黑名单来电拦截自动挂断
- Service-黑名单来电自动挂断
- Android开发之黑名单来电自动挂断
- Android黑名单自动挂断来电(AIDL)
- Android电话设置黑名单,来电自动挂断
- 手机管理器之自动挂断黑名单的来电(六十四)
- java代码设置手机来电黑名单自动挂断
- android 自动挂断来电
- 初学Android,手机管理器之自动挂断黑名单的来电(六十四)
- 初学Android,手机管理器之自动挂断黑名单的来电(六十四)
- Android黑名单自动挂断电话
- 自动接听或者挂断来电
- AudioManager黑名单来电自动静音
- android 来电自动接听和自动挂断
- android 来电自动接听和自动挂断
- Android侧边栏
- IBus输入法之‘i’nteresting
- Java总结(12) 网络编程2
- 图像数据类型的转换 matlab opencv
- 操作系统和编译器宏定义
- 黑名单来电自动挂断
- 专家系统
- linux下编译运行驱动
- 获取ibitas中的sql语句
- 智能指针 std::auto_ptr 和 shared_ptr
- Java 垃圾收集(Garbage Collection)
- andengine-2:andengine实现一个简单例子, 小球随手指移动
- android之写文件到sd卡
- linux中的kill命令 及 强制终止进程的方法