Android实时监听短信并上传服务器
短信监听
Android监听手机短信的方法有两种,分别为:
1、接受系统的短信广播:当手机收到新消息时,会发送一条广播,通过该广播就可以获取短信内容;
2、监听短信数据库:利用观察者模式监听短信数据库,当短信数据库改变时就可以触发观察者模式的onChange()方法;
具体实现代码可见:
android开发中两种方式监听短信的原理和实现
注意事项: 读取手机短信需要读取手机短信的权限,首先要在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
由于读取手机短信属于危险权限,还需要在代码中动态请求用户授权,在MainActivity.java的onCreat()方法中添加如下代码
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this, new String[] { Manifest.permission.READ_SMS }, 1);
}
Android系统对所有的危险权限进行了分组,称为权限组 。属于同一组的危险权限将自动合并授予,用户授予应用某个权限组的权限,则应用将获得该权限组下的所有权限(前提是相关权限在 AndroidManifest.xml 中有声明),所有危险权限见下表:
编号 | 权限组 | 权限 |
---|---|---|
1 | CALENDAR (日历) |
READ_CALENDAR WRITE_CALENDAR |
2 | CAMERA (相机) | CAMERA |
3 | CONTACTS (联系人) |
READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS |
4 | LOCATION (位置) |
ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION |
5 | MICROPHONE (麦克风) | RECORD_AUDIO |
6 | PHONE (手机) |
READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS |
7 | SENSORS (传感器) | BODY_SENSORS |
8 | SMS (短信) |
SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS |
9 | STORAGE (存储卡) |
READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE |
使用okhttp上传短信到服务器
先在build.graddle中添加依赖项
添加完毕后记得点击sync now
在AndroidManifest.xml中添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
代码中添加上传数据到数据库的代码,建议使用json来存储需要上传的数据
使用json构造requestbody,json中放什么数据可以根据需求决定
JSONObject obj = new JSONObject();
try {obj.put("addressee",收件人);obj.put("sender",发件人);obj.put("data",短信内容);obj.put("time",接收时间);
} catch (JSONException e) {e.printStackTrace();
}
MediaType type = MediaType.parse("application/json;charset=utf-8");
RequestBody requestBody = RequestBody.create(type, obj.toString());
使用okhttp异步上传数据到后端
client = new OkHttpClient();
url = 后端接口;
Request request = new Request.Builder().url(url).post(requestBody).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {@Overridepublic void onFailure(@NonNull Call call, @NonNull IOException e) {}@Overridepublic void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {if(response.isSuccessful()){String result = response.body().string();Log.i(TAG, "onResponse: "+result);
开启Service实现锁屏监听
在Activity中监听短信,当应用被放入后台或者屏幕锁定一段时间后就无法继续将短信内容上传服务器,所以需要启动一个Service,在Service中监听短信,就可以在锁屏后继续监听短信。
要启动Service,首先需要在申请android.permission.FOREGROUND_SERVICE权限,该权限为普通权限,所以只要在AndroidManifest.xml中声明即可
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
之后还需要在AndroidManifest.xml中添加Service类对应的<service>标签,其中三条属性值的含义分别为:
android:name为pakagename+Service类名,pakagename可以省略;
android:enabled表示是否可以被系统实例化;
android:exported表示其它应用的组件是否可以唤醒service或者和这个service进行交互;
<serviceandroid:name=".MyService"android:enabled="true"android:exported="true"\>
Android8.0之后不再允许使用startService()启动服务,只能使用startForegroundService()启动服务,而且该服务必须是前台服务,具体启动方法可参考以下文章:
不需要与Service交互,使用startForegroundService()启动服务
需要与Service交互,使用bindService() 启动服务
Android实时监听短信并上传服务器相关推荐
- android 监听短信并发送到服务器
1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. 2. 应用观察者模式,监听短信数据库,操作短信内容. 实例如下: SystemE ...
- java监听短信_Android上监听收到的短信(SMS)
Android SDK1.1 验证可行. 1.实现一个Receiver[收到的是PDU,需要从PDU中还原出SMSMessage] Java代码 public void onReceive(Conte ...
- android广播监听短信并显示内容
still直接代码啦- <receiver android:name=".receive"> <intent-filter> <action andr ...
- android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信
以下方法均测试成功 一.用命令模拟 (一).模拟来电 1.打开命令行cmd,输入telnet 回车. 2.然后输入 o localhost 5554 回车,连到Emulator上. 3.输入gsm c ...
- android 模拟器监听短信,android模拟器用命令和DDMS模拟来电和短信(示例代码)
以下方法均测试成功 一.用命令模拟 (一).模拟来电 1.打开命令行cmd,输入telnet 回车. 2.然后输入 o localhost 5554 回车,连到Emulator上. 3.输入gsm c ...
- Android 监听短信数据库过滤获取短信内容上传至服务器
前言 Android 监听短信的方式有两种 1.监听短信数据库,数据库发生改变时回调. 2.监听短信广播 其中第二种方式由于国内各厂家的定制Android 可能导致无响应 目前测试 魅族 无法监听到短 ...
- Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)
一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听 ...
- android 发送彩信监听,在Android中发送短信和彩信,监听短信并显示
发送短信: String body="this is sms demo"; Intent mmsintent = new Intent(Intent.ACTION_SENDTO, ...
- android 监听短信并获取验证码
最近想给 app 添加自动获取短信验证码的功能,让注册流程更加友好,在网上搜索了一些资料,主要的实现方法有两种. 第一:实现广播 BroadCastReceiver 来监听收件箱,在需要监听的地方注册 ...
最新文章
- 不开玩笑:请远离那些吃老本的同事
- service调用的存储过程里显式commit,而导致事务不能rollback
- Maven笔记——maven下载与配置
- Service-Oriented Architecture,SOA(转)
- setuptools安装_在Ubuntu 18.04系统上安装ERPNext ERP
- 补习系列(7)-springboot 实现拦截的五种姿势
- LINUX让环境变量立即生效的方法
- python市场需求如何_2020年Python市场前景广阔
- 显示出eclipse文件层次
- 淘宝开源代码质量检测工具!(附源码)
- Mac m1 max 工具安装及简介
- JAVA入门教程-专题视频课程
- 最近开发了一个向QQ好友自动发送消息的程序
- 简单的C语言顺序结构例题介绍
- 亚丁号云控之发布任务
- 数商云:大宗商品撮合交易平台搭建丨加强业务、技术、应用与集成的创新
- HTML标签关系——双标签和单标签,标签的嵌套与并列
- 禁止chrome更新呢
- 前端剑法第一式———砺锋
- iOS 语音搜索通讯录算法
热门文章
- npm报错 443(error : getaddrinfo enotfound registry.npmjs.org registry.npmjs.org:443)
- “海盗”贝索斯:出色的商人,疯狂的投资家
- 关系型数据库设计原则
- 【Adobe】Photoshop :Mac 系统 Photoshop 软件更换许可指引
- 人工智能到底是什么?AI基础概念深度解析
- linux 卸载yum源,CentOS下rpm包与yum安装与卸载更新系统源
- 知道创宇爬虫题--代码持续更新中
- 订单系统设计 —— 数据同步与监控
- Flink任务失败,检查点失效:Exceeded checkpoint tolerable failure threshold.
- java计算机毕业设计乐多多宠物店网站源代码+数据库+系统+lw文档