热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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  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 list = smsManager.divideMessage(content);
  for(String mMsg: list){
   smsManager.sendTextMessage(phoneNumber, null, mMsg, null, null);
  }
 }else{
  smsManager.sendTextMessage(phoneNumber, null, content, null, null);
 }
}


推荐阅读
  • 本文介绍了两种获取和研究 .NET Framework 源代码的有效途径:一是通过官方提供的下载链接获取完整源代码,并使用 Visual Studio 进行本地查看;二是利用在线资源平台,直接在网页上浏览源代码。 ... [详细]
  • 本文介绍了两种在Android设备上获取MAC地址的有效方法,包括通过Wi-Fi连接和使用移动数据流量的情况。第一种方法依赖于Wi-Fi连接来获取MAC地址,而第二种方法则无需Wi-Fi,直接通过网络接口获取。 ... [详细]
  • 本文介绍如何在指定的Module中通过配置build.gradle文件来生成自定义名称和路径的JAR文件,适用于Gradle 2.4及以上版本的Android Studio环境。 ... [详细]
  • 本文详细介绍了在Delphi环境中对DLL文件进行断点调试的方法,包括设置依赖的可执行文件、编译器和链接器的调试选项,以及运行时参数的配置。 ... [详细]
  • Git支持通过自定义钩子来扩展其功能,这些钩子根据触发条件的不同,可以分为客户端和服务器端两种类型。客户端钩子通常与本地操作相关联,如提交代码或合并分支;而服务器端钩子则与远程仓库的交互有关。 ... [详细]
  • 本文介绍如何创建一个专门用于处理浮点数的JSON处理器,并将其注册到JSON配置器中,以实现对浮点数的精确控制和格式化输出。 ... [详细]
  • 前文|功能型_品读鸿蒙HDF架构
    前文|功能型_品读鸿蒙HDF架构 ... [详细]
  • Kotlin 扩展函数详解及其工作原理
    本文详细探讨了 Kotlin 中的扩展函数概念,包括其定义、使用方式以及背后的实现机制,并分析了使用扩展函数时的一些限制。 ... [详细]
  • 详细的介绍针对graphiclayer的空间查询。首先,空间查询的方式:提供多种类型的空间查询,包括点周边、线周边、面内等多种方式;其次,图形绘制完成后状态的展示;再次 ... [详细]
  • Navicat 导出查询结果时如何生成包含指定列名的 INSERT 语句
    本文介绍了在使用 Navicat 导出查询结果时,如何确保生成的 INSERT 语句中包含指定的列名,避免因设置不当导致列名缺失的问题。 ... [详细]
  • 本文介绍了iftop的下载地址、基本参数配置方法及其在不同Linux发行版中的安装问题解决方案。iftop是一款强大的实时网络流量监控工具,适用于需要精确监控网络带宽使用情况的场景。 ... [详细]
  • 深入理解二叉树的遍历算法:VRL、RVL、RLV
    本文详细介绍了二叉树的不同遍历方法,包括层次遍历、先序遍历(VRL)、中序遍历(RVL)和后序遍历(RLV)。通过具体示例和代码实现,帮助读者更好地理解和应用这些遍历技术。 ... [详细]
  • 本文探讨了如何为Web浏览器(如Firefox)添加全局热键(例如媒体控制键),并详细说明了实现这一功能所需的步骤,包括可能需要的Firefox扩展和Greasemonkey脚本。 ... [详细]
  • 深入解析 Android 文件下载的三种主流方法
    本文详细探讨了在 Android 平台上实现文件下载功能的三种常见方法:URLConnection、DownloadManager 和 OkHttp。每种方法都有其特点和适用场景,通过本文的分析,开发者可以根据实际需求选择最合适的技术方案。 ... [详细]
  • 解决Android中getDrawable与getColor方法过时问题
    随着Android SDK更新至版本23,getDrawable()和getColor()方法被标记为过时。尽管这些方法仍可运行且不会导致错误,但为了代码的整洁性和未来的兼容性,寻找合适的替代方案变得尤为重要。 ... [详细]
author-avatar
我女神不能F哭不能输丶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有