一、需求分析
不少人平常都会收到骚扰电话,在目前大数据时代,个人隐私无法得到完全的保障,因此,非常需要一个简易的黑名单功能,对骚扰电话进行拦截。

二、功能描述
用户将一些手机号加入黑名单后,如果有电话拨入,判断手机号码是否匹配,如果相同则进行挂断。

三、过程分析

启动服务后,用户将骚扰号码存入黑名单中,软件监测电话状态,当有电话拨入后,判断是否存在于黑名单中,若匹配,则进行挂断;若不匹配,则保持原有状态。

四、预设API
TelephonyManager: 电话服务的管理器
context.getSystemService(Context.TELEPHONY_SERVICE): 得到它的对象
listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE): 监听电话状态
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;
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 blocke.printStackTrace();}}break;case TelephonyManager.CALL_STATE_OFFHOOK:// 接通Log.e("TAG", "接通");break;default:break;}}};@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn 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();}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();// 得到电话管理器tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);// 监听电话状态tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.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

<service android:name="com.example.appservice.ListenCallService"></service>  

4.设置开机即开启黑名单

<receiver android:name="com.example.appservice.BootReceiver">  <intent-filter >  <action android:name="android.intent.action.BOOT_COMPLETED"/>  </intent-filter>  </receiver>  
package com.example.appservice;  import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
/** * 接收开机完成广播的receiver * @author Xiaocici * */
public class BootReceiver extends BroadcastReceiver {  @Override  public void onReceive(Context context, Intent intent) {  //启动电话监听的receiver  context.startService(new Intent(context, ListenCallService.class));  }  }  

六、总结分析
软件可以初步满足需求,可着眼于设置免打扰时段、拒接回执短信等服务,因为本人能力有限,暂时只完成对骚扰电话的拦截,之后会近一步完善功能。

作者:陈语童
原文链接:https://blog.csdn.net/weixin_41402015/article/details/80716498

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

  1. 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...

    软件开发手机app系统软件高端定制-做一个app软件要多少钱 APP开发分原生APP开发和在线制作,我们来看下这两种都需要多少费用吧. 1.原生APP开发(定制开发) 互联网是个神奇的大网,大数据开发 ...

  2. APP源码 教程 网页转APP 安卓Andriod应用开发 手机APP 移动网站

    本教程针对目前会制作网站并且想向网站移动端APP发展,并且善于技术钻研和研究的用户,怎么把网页转成APP.制作容易修改的APP.网站开发人员向移动APP制作端转变.快速开发APP,安卓Andriod应 ...

  3. 【Android开发】旧书交易系统(OBT),安卓购物软件开发,安卓聊天软件开发,数据库应用,安卓直连mysql数据库

    文章目录 一.项目简介 1. 概述 2. 意义 3. 软件卖点 4. 软件创新点 5. 主要功能 二.项目架构 1. 登录注册模块 2. 首页设计模块 3. 图书管理模块 4. 用户管理模块 5. 订 ...

  4. 安卓app软件开发教程!免费Android高级工程师学习资源,值得收藏!

    写在前面 记得我大二时"不务正业"地自学Android并跟了老师做项目,到大三开始在目前的公司实习,至今毕业已有几年多,学习Android已经6.7年多了!但总感觉知识点很零散,并 ...

  5. 安卓移动软件开发:简易录音软件实现

    一.需求分析 代替了录音笔,可以方便人们记录一些声音内容. 二.功能描述 用户启动程序后,点击录音按键,进行录音并保存. 三.预设API startRecord:开始录音 cancelRecord:取 ...

  6. 移动办公APP软件开发前景怎样

    移动办公app软件开发公司表示:现代化的企业办公都主张自动化,越来越多的企业为了提高工作效率,开始开发专属自己的移动办公APP,用于企业内部人员管理. 移动办公App的出现,给企业和员工的工作带来了极 ...

  7. 安卓手机软件开发_无代码手机app软件开发,让人人都是专业开发工程师

    点击上方蓝色字关注我们~ 近期,谷歌发布了自己的无代码在线app开发平台,这款全新工具旨在让任何一个人都可以轻松进行手机app软件开发.这样的动作无疑指引着安卓软件开发的未来.

  8. 安卓手机软件开发_安卓85家庭理财软件个人记账(app)

    安卓85家庭理财软件个人记账(app) 该设计有演示视频 100%能运行 买重包换 保密发送 一校一份 编号: 安卓85 语言+数据库: 安卓 论文字数: 12674字 摘要 随着社会经济的不断高速发 ...

  9. 安卓手机软件开发_原生开发app价格

    4.宣布运作app手机软件环节:新项目标准管理体系宣布公布.新项目管理体系宣布运作: 5.运作维护保养app手机软件环节:系统软件总体运作维护保养. 做app手机软件需要多少钱?危害APP邯郸软件开发 ...

最新文章

  1. 深入理解风格迁移三部曲(三)--FUNIT
  2. 6大准则+10道习题,终于有人把怎样选择图表讲明白了
  3. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势
  4. linux sock结构体,struct socket结构体详解
  5. codeforces 721E Road to Home
  6. EhCache的配置
  7. 我想做一个课程表系统利用PHP+MYSQL+HTML实现课表的展示,但是不知道如何实现
  8. Unity WebGL 窗口自适应
  9. cube station下载_Cube Station
  10. Jenkins+git 实现代码自动发布
  11. iOS中的所有字体和UILabel
  12. 7.Java反射面试题
  13. 使用ExtendSim进行制造业仿真
  14. 模型运行速度FPS测试以及参数Parameter计算代码
  15. 【背包问题】完全背包问题
  16. 我爱淘冲刺阶段站立会议每天任务4
  17. 日更第1天:Linux常用命令之dnf用法
  18. 贝壳找房上海研发全员被优化,公司回应来了!
  19. python在线查题_知到题目在线答案查询
  20. 《Pro SQL Server Internals, 2nd edition》节选翻译(一)

热门文章

  1. 灰色项目之影视卡项目背后的套路与行业现状
  2. Spring Integration 系统集成
  3. java版微信公众号支付
  4. 正大期货:关于MSCI中国A50上市,与国内股指期货的优势
  5. Matlab 最小二乘法拟合平面(SVD)
  6. Fedora25下源码安装Xen4.8
  7. k线图分析有技巧要注意
  8. Android 实例-个人理财工具 之五 账单明细显示A
  9. React学习--- 事件处理
  10. POJ 6264:走出迷宫