练手小项目(4)安全卫士——黑名单拦截,广播和服务的加入进行拦截

 上一节讲到,在数据库进行添加和删除,查询的操作,这一节主要讲怎么用广播和服务进行拦截 


为了能够打开服务 让广播同时关闭,所以我们不能将广播在配置文件中进行注册,不好管理,所以我们将广播放在服务里面。先建立一个服务。

CallSmsSafeService.java 

注意要在配置文件中注册。

在前面的文章中我提过,服务就是一个没有界面的activity,so 你要自己复写,Oncreate 和Ondestory 方法进行注册 和销毁 服务和广播。


    //1.实例化出来 广播接收者

		receiver = new InnerSmsReceiver();

    //2.注册广播接受者

registerReceiver(receiver, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));


    //3.销毁广播
<pre name="code" class="java">unregisterReceiver(receiver);

是不是发现和在配置文件中注册是一个步骤, 一个监听对象和一个 过滤器动作。

然后再我们自己定义的InnerSmsReceiver 写上我们要执行的操作
	private class InnerSmsReceiver extends BroadcastReceiver{

		@Override
		public void onReceive(Context context, Intent intent) {
			//检测到来短信是否是黑名单号码,设置短信拦截
			Object[] objs= (Object[]) intent.getExtras().get("pdus");
			for (Object obj : objs) {
				SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
				//得到短信发件人
				String sender = smsMessage.getOriginatingAddress();
				String mode = dao.findMode(sender);
				if("2".equals(mode)||"3".equals(mode)){
					abortBroadcast();
				}
				//演示代码。
				String body = smsMessage.getMessageBody();
				if(body.contains("fapiao")){
					//你的头发票亮的很  语言分词技术。
					abortBroadcast();
			}
		}
		}
	}


然后通过服务进行监听来电电话阶段
        //①先得到电话的管理服务
	tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);

//②进行注册监听和动作
           tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

    //③定义一个服务监听来电
private class MyListener extends PhoneStateListener{@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_RINGING://零响状态。String result = dao.findMode(incomingNumber);if("1".equals(result)||"3".equals(result)){endCall();}break;default:break;}}}
然后通过aidl 进行挂断电话,因为从1.7版本以后 谷歌就把这个功能给隐藏掉了
	public void endCall() {
		//IBinder iBinder = ServiceManager.getService(TELEPHONY_SERVICE);
		try {
			//加载servicemanager的字节码
			Class clazz = CallSmsSafeService.class.getClassLoader().loadClass("android.os.ServiceManager");
			Method method = clazz.getDeclaredMethod("getService", String.class);
			IBinder ibinder = (IBinder) method.invoke(null, TELEPHONY_SERVICE);
			ITelephony.Stub.asInterface(ibinder).endCall();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


 记得在Ondestory中销毁服务 

tm.listen(listener, PhoneStateListener.LISTEN_NONE);

下一篇地址

练手小项目(3)安全卫士——黑名单拦截 利用内容提供者删除通话记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一位练习时长两年半的安卓练习生根据鸿神提供的WanAndroid开放Api来制作的产品级App,基本实现了所有的功能,采用Kotlin语言,基于Material Design AndroidX MVP RxJava Retrofit等优秀的开源框架开发,注释超详细,方便大家练手如果你觉得做的还可以对你有帮助,容我卑微地向你要个star,有任何问题或建议,欢迎提交issues前言前段时间学习了 Kotlin ,就打算写一个项目来练练手刷刷熟练度,因为经常逛鸿神的WanAndroid网站,觉得很不错,Api也很丰富健全, 虽然根据WanAndroidAPi开发出的app多如牛毛,有诸多优秀的app,但是每个人的喜好与审美不一样,所以都没有做到我心目中的最完美,于是我就想做一个自己觉得最满意的app。界面的话参考了很多的app风格,根据自己的搭配实现,感觉还不错吧实现的功能首页五大模块:首页 / 项目 / 体系/ 公众号 / 我的登录注册功能导航功能搜索功能 热门搜索推荐 搜索历史记录积分功能 积分排行 积分获取记录收藏功能 收藏文章 收藏网址待办清单 添加清单 编辑清单 删除清单文章网址详情 详情中收藏 分享 浏览器打开全局修改应用主题色全局修改列表的加载动画侧滑返回 可打开与关闭文章在任何地方收藏与取消,其他界面相对应的数据也会变化布局优化,大量使用ConstraintLayout集成Bugly收集bug并实现App更新APP下载GitHub下载fir.im下载扫码应用截图    主要开源框架一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的框架-RxJava2一个依赖注入框架-Dagger2处理网络请求的框架-Okhttp一个基于OKHttp封装的网络加载框架-Retrofit转换json数据的官方框架-GsonAndroid的事件发布-Eventbus项目核心库MVP框架-MVPArms屏幕适配AndroidAutoSize一个美丽的、流体和可扩展的对话框-Material-dialogs一个强大的Fragment管理库-Fragmentation一个增强BottomNavigationView的安卓库-BottomNavigationViewEx强大、可定制、易扩展的 ViewPager 指示器框架-MagicIndicator一个强大的轮播库-BGABanner-Android一个强大并且灵活的RecyclerViewAdapter-BaseRecyclerViewAdapterHelperRecyclerView侧滑菜单,Item拖拽,滑动删除Item,自动加载更多,HeaderView,FooterView,Item分组黏贴-SwipeRecyclerView揭示效果布局-RevealLayout优雅地处理加载中,重试,无数据-Loadsir基于Android WebView的一个强大的库-AgentwebAndroid流式布局-FlowLayout基于mmap内存映射的移动端通用 key-value 组件-MMKV侧滑返回-SmartSwipe全局捕捉异常防止崩溃-CustomActivityOnCrash素材来源阿里巴巴矢量图标库借鉴了花瓣的登录页goweii项目中的App图标特别感谢感谢鸿神的WanAndroid网站提供的开放API,我在issues提了一些自己的需求,鸿神也耐心的帮忙添加了,谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值