Android短信接收监听、自动回复短信操作例子
发布时间:2022-12-04 20:07:50
标签:Android,短信
定义广播 * 的Action:
private static final String TAG ="SmsService";
/**
* 信息发送状态广播
*/
private static final String ACTION_SMS_SEND = "com.SmsService.send";
/**
* 信息接收状态广播
*/
private static final String ACTION_SMS_DELIVERY = "com.SmsService.delivery";
/**
* 信息接收广播
*/
private static final String ACTION_SMS_RECEIVER = "android.provider.Telephony.SMS_RECEIVED";
定义并注册广播 * ,可以动态注册,也可以静态注册:
class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
int resultCode = getResultCode();
if (intent.getAction().equals(ACTION_SMS_RECEIVER)){
Log.i(TAG, "SmsReceiver->onReceive");
SmsMessage sms = null;
Bundle bundle = intent.getExtras();//获取intent中的内容
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");//获取bundle里面的内容
for (Object obj : pdus) {
//下面两行将短信内容取出加入到message中
sms = SmsMessage.createFromPdu((byte[]) obj);
}
}
mHandler.obtainMessage(MSG_SMS_RECEIVE,sms).sendToTarget();
//接收信息发送状态
}else if (intent.getAction().equals(ACTION_SMS_SEND)){
switch (resultCode) {
case Activity.RESULT_OK:
Log.i(TAG, "短信发送成功");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.i(TAG, "短信发送失败:GENERIC_FAILURE");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.i(TAG, "短信发送失败:NO_SERVICE");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.i(TAG, "短信发送失败:NULL_PDU");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.i(TAG, "短信发送失败:RADIO_OFF");
break;
}
//接收信息接收状态
}else if (intent.getAction().equals(ACTION_SMS_DELIVERY)){
switch (resultCode) {
case Activity.RESULT_OK:
Log.i(TAG, "短信接收成功");
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
Log.i(TAG, "短信接收失败:GENERIC_FAILURE");
break;
case SmsManager.RESULT_ERROR_NO_SERVICE:
Log.i(TAG, "短信接收失败:NO_SERVICE");
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
Log.i(TAG, "短信接收失败:NULL_PDU");
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
Log.i(TAG, "短信接收失败:RADIO_OFF");
break;
}
}
}
}
这样就实现了短信自动回复功能,当然也可以实现接收到短信自动回拨电话。这里提供一个短信接收函数:
public void doReceiveSms(Intent intent) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
SmsMessage [] messages = new SmsMessage[pdus.length];
for(int i=0; i<pdus.length; i++){
byte[]pdu = (byte[]) pdus[i];
//从pud中创建一个消息
messages[i] = SmsMessage.createFromPdu(pdu);
}
for(SmsMessage msg: messages){
//获取短信的内容
String content = msg.getMessageBody();
//获取发送的人
String sender = msg.getOriginatingAddress();
//获取短信的时间
long timer = msg.getTimestampMillis();
//将毫秒数字转换成日期格式
Date date = new Date(timer);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD HH-MM-SS");
String time = sdf.format(date);
String smsContent = time + ": " + sender + ": " + content;
//调用发送短信的方法
sendSmsMessage("5556", smsContent);
}
}
短信发送:
public void sendSmsMessage(String phoneNumber, String content){
SmsManager smsManager = SmsManager.getDefault();
//判断短信内容的长度,如果长度大于70就会出错,所以这步很重要
if(content.length() >= 70){
List<String> list = smsManager.divideMessage(content);
for(String mMsg: list){
smsManager.sendTextMessage(phoneNumber, null, mMsg, null, null);
}
}else{
smsManager.sendTextMessage(phoneNumber, null, content, null, null);
}
}
0
投稿
猜你喜欢
- “热更新”、“热部署”相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合
- 本文实例讲述了C#实现Zip压缩目录中所有文件的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syst
- DataGridView是Visual Studio中一个最重要的数据控件。它可以应用在大多数场合,功能强大,使用灵活。本文要重点介绍一下,
- 前言这段时间在学习Spring,依赖注入DI和面向切面编程AOP是Spring框架最核心的部分。这次主要是总结依赖注入的bean的装配方式。
- using Microsoft.Win32 ; 1.读取指定名称的注册表的值 &nbs
- Android 登录处理简单实例今天整理一下之前在项目中写的关于某些界面需要登录判断处理。这里整理了一个简易的 Demo 模拟一下 登录情况
- 前言前几天 在自己的 笔记本上把android studio 升级到4.1了 一直没有使用Gsonfomat插件所以没有发现问题!今天使用G
- 本文实例为大家分享了java实现人机猜拳游戏的具体代码,供大家参考,具体内容如下完成人机猜拳互动游戏的开发,用户通过控制台输入实现出拳,电脑
- 这篇文章主要介绍了如何基于Java实现对象List排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 1. 背景Java Persistence with Hibernate 在12.2.1小节使用如下例子描述 n+1查询问题:List<
- 本文实例讲述了C#实现的文件压缩和解压缩类。分享给大家供大家参考。具体分析如下:这个C#代码包含了几个类,封装了文件压缩和解压缩常用的方法,
- 时间轴主要使用Recyclerview来实现。开发语言使用Kotlin,代码相对java少了许多也简洁许多源代码下载地址效果图:MainAc
- 如果想实现一个在桌面显示的悬浮窗,用Dialog、PopupWindow、Toast等已经不能实现了,他们基本都是在Activity之上显示
- 1. 简介直到4g时代,流量依然是宝贵的东西。而移动网络传输中,最占流量的一种载体:图片,成为了我们移动开发者不得不关注的一个问题。我们关注
- 引言在Flutter开发中,所有的组件和页面都继承自Widget,所以探索页面的生命周期其实就是Widget的生命周期。 在 Flutter
- 在intellij中忽略提交文件,分两种情况,文件没有纳入版本管理第一种方法文件还没有纳入版本管理,这种通过 svn的ignore配置ver
- package list;import java.util.ArrayList;/** * Java约瑟夫问题: n个人(不同id
- 在注册表启动项里添加一项,路径:SOFTWARE\Microsoft\Windows\CurrentVersion\Run或者直接:运行-&
- 最近在做上传文件的服务,简单看了网上的教程。结合实践共享出代码。由于网上的大多数没有服务端的代码,这可不行呀,没服务端怎么调试呢。Ok,先上
- 现假设某个公司采用公用电话来传递数据,数据是四位的整数,在传递过程中是加密的。加密规则是每位数字都加上5,然后再用除以10的余数代替该数字,