今天参加了培训公司筹划的面试,主要是关于安卓客户端的技术面试,总结这次面试我决定写一些总结,首先就是关于我所写的手机通讯录的短信拦截功能的介绍:手机在接收到短信后会发出一段广播,我们只需在程序中写个广播接收器,然后写好特定的权限就可实现此功能。以下的百度的实验代码: 

public class SMSBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Object[] pdus = (Object[])intent.getExtras().get("pdus");//获取短信内容for(Object pdu : pdus){byte[] data = (byte[]) pdu;//获取单条短信内容,短信内容以pdu格式存在SmsMessage message = SmsMessage.createFromPdu(data);//使用pdu格式的短信数据生成短信对象String sender = message.getOriginatingAddress();//获取短信的发送者String content = message.getMessageBody();//获取短信的内容Date date = new Date(message.getTimestampMillis());SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String sendtime = format.format(date);SmsManager manager = SmsManager.getDefault();manager.sendTextMessage("5556", null,"发送人:"+sender+"-----发送时间:"+sendtime+"----内容:"+content , null, null);//把拦截到的短信发送到你指定的手机,此处为5556//    if("number".equals(sender)){//        abortBroadcast();//    }                                 //如果不想让机主接收到某个号码的短信,//可以取消这段注释, number 为指定的号码//也可在此处给这个号码回复的内容。。。。。}}
}

下面是百度的短信拦截的第二段代码:

package com.tigertian.sms;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;public class SMSReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("SMSReceiver, isOrderedBroadcast()="+ isOrderedBroadcast());Bundle bundle = intent.getExtras();Object messages[] = (Object[]) bundle.get("pdus");SmsMessage smsMessage[] = new SmsMessage[messages.length];for (int n = 0; n < messages.length; n++) {smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);if(smsMessage[n].getMessageBody().contains("hahaha")){this.abortBroadcast();}System.out.println(smsMessage[n].getOriginatingAddress()+" "+smsMessage[n].getMessageBody()+" "+smsMessage[n].getIndexOnIcc());}}
}
<receiver android:name=".SMSReceiver"><intent-filter android:priority="10000"><action android:name="android.provider.Telephony.SMS_RECEIVED"></action><category android:name="android.intent.category.DEFAULT" /></intent-filter>
</receiver>

上面的代码是一个消息监听,监听接收短信的消息。我们可以从控制台打印信息里面看到,他是一个OrderedBroadcast,根据这一点我们就可以对短信机制进行拦截。如何拦截呢?


       首先要声明一个消息监听器,同时根据上面的配置文件需要在AndroidManifest.xml中配置好,注意它的优先级是10000,这一点很关键,因为OrderedBroadcast是根据优先级来传递消息的,优先级越高越先获取到消息,待处理完后才会传递给下一个监听器,如果当前监听器退出广播,那么后面的所有监听器都将无法收到消息。
       其次我们需要实现onReceive方法,根据上面的代码,我们可以从bundle中拿到短信内容并还原成SmsMessage,这样我们可以根据特定条件来判断哪些是需要我们拦截并且不要让用户知道的,哪些是我们可以放行的。需要我们拦截的短信,我们可以在收到后直接abortBroadcast()(上面的代码中是判断当短信内容包含hahaha的时候直接拦截),这样系统收件箱将无法接收到该条短信,继而也就不会有notification去通知用户。
       至此,应用编写好之后,短信拦截功能就完成了,当然基于此还可以做一些其他功能,这方面就看需求了。注意,优先级相同,则根据包名依次传递广播。
想删除收件箱中已存在的短信,请参考Android源码SmsProvider类,可以在你的应用中使用ContentProvider机制进行操作。 

关于Android短信拦截相关推荐

  1. Android短信拦截机制适配的坑(下)--4.4以上系统,主要是6.0

    前一篇文章,Android短信拦截机制适配的坑(上)--4.4以下系统 介绍了广播接收的顺序,但是我明确说明在4.4以下系统,那么4.4及以上系统会遇到说明问题呢? 首先我们要来了解4.4系统短信的机 ...

  2. 关于Android短信拦截(二)

    题外话:因为这是一篇来自百度的文章,并且在好多网站中都有转载,但却没有标明出处,所以我也搞不清作者是何人,特在此声.另外,关于这个例子的实现,一定要注意权限的设置,我在这里例子的实验中,由于没有找到S ...

  3. Android 短信拦截及用途分析

    监听系统短信这个只能作为一个技术点来研究下,读者可能在工作中可能不会哦涉及到,一般的应用软件也不会有这个需求 但是作为程序员呢,多了解一下也是好的. Android 监听系统短信有什么用? 1.对系统 ...

  4. android短信拦截与发送,有效拦截苹果iMessage垃圾短信的几个方法

    近来,有不少手机用户反映,自己使用的iPhone手机经常出现各类促销广告的垃圾短信,涉及到的内容跟其它的垃圾短信几乎没什么区别.不过,值得注意的 是,这些垃圾短信并不是通过陌生手机号码或者特定的短信客 ...

  5. Android短信拦截2019,垃圾短信退订套路深 手机上装拦截软件是可行方法

    应对 手机上装拦截软件是可行方法 相关数据显示,2017年通过某知名手机安全卫士拦截的骚扰电话全年共计380亿次,相比2016年的385亿次略有下降:垃圾短信方面,全年拦截量从2013年的900亿条, ...

  6. Android短信拦截

    http://www.cnblogs.com/GarfieldTom/archive/2012/08/25/2655609.html 转载于:https://www.cnblogs.com/anffl ...

  7. Android短信拦截2019,关于征集2019年度信息科学领域重大项目立项建议的通告

    为了进一步完善重大项目立项机制,做好项目的立项和资助工作,信息科学部根据国家自然科学基金管理办法的规定,围绕信息领域"十三.五"优先发展战略,面向科技界征集重大项目立项建议. 一. ...

  8. WCF 实例 —— Android 短信助手 (WCF + Android)

    (1)最近开始学习 Android,为了更快上手于是给自己找个小课题来练习一下: WCF作为服务端开放RESTful Service,Android作为客户端将手机上的短信传给服务端显示,并轮询服务端 ...

  9. Android的BroadcastReceiver 广播 短信拦截

    如何去理解BroadcastReceiver(广播)?其实可以这样想,首先我们要有一个发送广播的"媒体",在这个例子中,我们暂且用activity组件作为这个媒体,当然以后会用到s ...

最新文章

  1. 实用jQuery代码段
  2. OSI七层模型,作用及其对应的协议
  3. Algorithm Course Review(1.1)
  4. 产品入门首月成长报告 | PMcaff-干货
  5. 新闻文字上下滚动代码
  6. add git 指定类型文件夹_UE4 使用git配合远程仓库
  7. 鸿蒙应用开发--事件
  8. 给所有的input设置 autocomplete=off
  9. 安装brew_MacBook Pro安装Homebrew慢的问题解决方案
  10. ei指什么_SCI、EI、ISTP国际三大检索分别指的是什么-百度经验
  11. 成人高考自考资讯网源码 织梦dedecms模板
  12. 纷享销客罗旭对话元气森林黄晓枫:零售数字化的终点不是创新,而是数据
  13. 计算机视觉 || 手写字体检测
  14. android APP 跳转到应用商店评分
  15. VMware虚拟机安装windows系统
  16. 一级建造师资格审核需要提交哪些材料?
  17. 微信收款接口_企业微信:3.0.26版本新功能介绍
  18. 联机/中断网络磁盘驱动器对话框
  19. [Nvidia Jetson ]设备-Nvidia Jetson Nano刷机安装EMMC镜像(不使用sdkmanager工具)
  20. POSTGRESQL 短查询优化,独立索引与组合索引 8

热门文章

  1. excel怎么一次性删除所有的批注
  2. 客户体验决胜2022,低代码是快速取胜之道
  3. 【图像分割】基于计算机视觉实现视网膜图像中的血管分割附matlab代码
  4. 经典智力题:火车运煤
  5. 一支雪糕卖66?钟薛高,你就偷着乐吧
  6. 《快速掌握PyQt5》第二章 信号与槽——裁判鸣枪与选手开跑
  7. iOS14隐私适配:根据不同的场景需求设置不同的定位精确度
  8. winxp连接不到HP LaserJet Pro M128fp MFP解决方法
  9. Sqlite3并发读写注意事项
  10. 12306车站信息爬取(4)——添加车票的票价信息