Java smslib包开发
上一篇文章我详细介绍RXTXcomm的安装方法和简单代码,如果小伙伴涉及到需要使用手机短信模块完成短信收发需求的话,可以使用到smslib进行开发。

首先还是同样的,将整个smslib包源码导入项目,并且将它所需依赖一起进行导入
导入完成之后,我们就可以对smslib包进行二次开发了
下面我提供一段使用smslib包发送短信的代码
import org.smslib.*;
import org.smslib.modem.SerialModemGateway;public class SMSSender {public static void main(String[] args) {// Configure the modem gatewaySerialModemGateway gateway = new SerialModemGateway("modem", "COM1", 9600, "", "");gateway.setInbound(true);gateway.setOutbound(true);try {// Initialize the SMSLib libraryService.getInstance().addGateway(gateway);Service.getInstance().startService();// Create the outbound messageOutboundMessage message = new OutboundMessage("recipientPhoneNumber", "你好世界");message.setEncoding(Message.MessageEncodings.ENCUCS2); // 设置编码格式为Unicode// Send the messageService.getInstance().sendMessage(message);// Clean up and stop the serviceService.getInstance().stopService();} catch (Exception ex) {ex.printStackTrace();}}
}
上面代码中,如果需要使用到手机通讯模块发送中文,记得要加上
message.setEncoding(Message.MessageEncodings.ENCUCS2);
这样一段代码才能正确设置编码格式
其次是这段代码
SerialModemGateway gateway = new SerialModemGateway("modem", "COM1", 9600, "", "");

对于这个构造方法,我们需要传入的是gatewayID,smslib里面有一个任务队列,这个id需要不重复,其次是COM口和波特率,最后两项分别是设备厂商和型号,比如传入Nokia 和6130即可以 Nokia 6130设备的AT命令操作设备。一般来说这两项传空即可。

可以看到,源码中如果传的是空串,那么它会使用通用的athandler
可以看到,smslib包封装了一个同样athandler,同时,有些at命令稍有不同的设备也的方法进行了重写


从这里,我们可以得到什么?
拿到一个手机通讯模块,如果他们at指令是通用的,那么new SerialModemGateway 的时候,后两项为空就行,如果比如拿到了一个华为设备,只需要在构造对象的时候传入具体的厂商和型号就行,它会在AATHandler load的时候去反射拿到具体的指令细节。同时,如果我们手上的设备既有一些跟常见at命令不一样的设备,然后smslib包又没有进行扩展,我们便可以根据上面的ATHandler_Hauwei一样,自己继承Athandler,自己进行扩展
上面说完了发送短信,接下来我们还需要的是实现收短信的功能
/*** Java的smslib包下的IInboundMessageNotification接口用于定义回调方法,当短信网关接收到新的短信消息时,会调用这个方法。这个接口被实现的类需要在接收到新消息时被通知。*/public class InboundNotification implements IInboundMessageNotification {public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg) {if (msgType == MessageTypes.INBOUND) {System.out.println(">>> New Inbound message detected from Gateway: " + gateway.getGatewayId());} else if (msgType == MessageTypes.STATUSREPORT) {System.out.println(">>> New Inbound Status Report message detected from Gateway: " + gateway.getGatewayId());}System.out.println("InboundNotification里面的gettext---------"+msg.getText());System.out.println(msg);try {// Uncomment following line if you wish to delete the message upon arrival.Service.getInstance().deleteMessage(msg);} catch (Exception e) {System.out.println("Oops!!! Something gone bad...");e.printStackTrace();}}}
只需要实现IInboundMessageNotification 里面的process方法即可,
然后从InboundMessage里面即可拿到短信的各项信息,然后进行业务处理

最后:smslib并没有编写手机通讯模块使用gprs功能发送数据的功能,我在它的基础进行了二次开发实现了网络通讯的功能,如果有需要的小伙伴可以私信我,我将无偿提供我的二开版本源码

相关文章:
Java smslib包开发
上一篇文章我详细介绍RXTXcomm的安装方法和简单代码,如果小伙伴涉及到需要使用手机短信模块完成短信收发需求的话,可以使用到smslib进行开发。 首先还是同样的,将整个smslib包源码导入项目,并且将它所需依赖一起进行导入 导入完成之后,我们就可以对smslib包进行二次开发了 下面…...
职业技术培训内容介绍
泰迪职业技术培训包括:Python技术应用、大数据技术应用、机器学习、大数据分析 、人工智能技术应用。 职业技术培训-Python技术应用 “Python技术应用工程师”职业技术认证是由工业和信息化部教育与考试中心推出一套专业化、科学化、系统化的人才考核标准&…...
AUTOSAR规范与ECU软件开发(实践篇)6.2 ETAS RTA系列工具入门
目录 1、 RTA系列工具安装方法 (1) ETAS RTA-RTE的安装方法 (2) ETAS RTA-BSW的安装方法...
vue3的hooks你可以了解一下
更详细的hooks了解参考这个大佬的文章:掘金:Hooks和Mixins之间的区别 刚开始我简单看了几篇文章感觉Hooks这个东西很普通,甚至感觉还不如vue2的mixin好用。还有export import 感觉和普通定义一个utils文件使用没什么区别。但是Hooks这个东西肯…...
面试之HTTP
1.HTTP与HTTPS的区别 HTTP运行在TCP之上;HTTPS是运行在SSL之上,SSL运行在TCP之上两者使用的端口不同:HTTP使用的是80端口,HTTPS使用的是443端口安全性不同:HTTP没有加密,安全性较差;HTTPS有加密…...
测试框架pytest教程(3)夹具-@pytest.fixture
内置fixture Fixture使用pytest.fixture装饰,pytest有一些内置的fixture 命令可以查看内置fixture pytest --fixtures fixture范围 在pytest中,夹具(fixtures)具有不同的作用范围(scope),用于…...
GNU make系列之介绍Makefile
一.欢迎来到我的酒馆 在本章节介绍Makefile。 目录 一.欢迎来到我的酒馆二.GNU make 预览三.一个简单的Makefile四.make程序如何处理Makefile文件五.在Makefile中使用变量 二.GNU make 预览 2.1 GNU make工具会自动决定哪些程序需要被重新编译,并且执行相应的命令来…...
Java8新特性之——方法引用
文章目录 一、简介二、举例实例方法引用(实例对象::实例方法名)静态方法引用(类名::静态方法名)类成员方法引用(类名::实例方法名)构造方法引用(类名::new)数组构造方法引用…...
等保测评--安全区域边界--测评方法
安全子类--边界防护 a) 应保证跨越边界的访问和数据流通过边界设备提供的受控接口进行通信; 一、测评对象 网闸、防火墙、路由器、交换机和无线接入网关设备等提供访问控制功能的设备或相关组件 二、测评实施 1)应核查在网络边界处是否部署访问控制设备&#x…...
【Flutter】Flutter 使用 device_info_plus 获取设备的制造商、型号等信息
【Flutter】Flutter 使用 device_info_plus 获取设备的制造商、型号等信息 文章目录 一、前言二、安装和基本使用三、实际业务中的用法四、完整示例五、总结 一、前言 在这篇博客中,我将为你介绍一个非常实用的 Flutter 插件:device_info_plus。这个插件…...
Flink、Yarn架构,以Flink on Yarn部署原理详解
Flink、Yarn架构,以Flink on Yarn部署原理详解 Flink 架构概览 Apache Flink是一个开源的分布式流处理框架,它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础,架构原理可以分为以下四个部分:JobManager、TaskM…...
软考高级系统架构设计师系列论文八十三:论软件设计模式的应用
软考高级系统架构设计师系列论文八十三:论软件设计模式的应用 一、软件设计模式相关知识点二、摘要三、正文四、总结一、软件设计模式相关知识点 软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构...
CDH集群离线配置python3环境,并安装pyhive、impyla、pyspark
背景: 项目需要对数仓千万级数据进行分析、算法建模。因数据安全,数据无法大批量导出,需在集群内进行分析建模,但CDH集群未安装python3 环境,需在无网情况下离线配置python3环境及一系列第三方库。 采取策略…...
python并行操作(基于concurrent.futures.ThreadPoolExecutor)
文章目录 一、明确自身cpu可并行的核数二、根据所有任务计算在各个核上平均跑多少任务三、最后把任务划分在不同的核上跑四、拿来主义 此为利用cpu并行计算的能力,充分利用cpu在循环时并行计算。其实也是受C并行操作的影响,如果需要C版,可以移…...
Leetcode.73矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…...
jdk 04 stream的collect方法
01.收集(collect) collect,收集,可以说是内容最繁多、功能最丰富的部分了。 从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。 collect主要依赖java.util.stream.Collectors类内置的静态方…...
介绍REST API
REST (Representational State Transfer) 是一种基于 web 架构的 API 设计风格, 允许客户端应用程序通过 HTTP 请求与服务器进行交互。RESTful API就是按照REST风格设计的API。 RESTful API 的设计原则包括:使用统一资源标识符 (URI) 标识资源ÿ…...
【leetcode 力扣刷题】反转链表+递归求解
反转链表递归求解 206. 反转链表解法①:取下一个节点在当前头节点前插入解法②:反转每个节点next的指向解法③:递归 92.反转链表Ⅱ反转left到right间节点的next指向 234.回文链表解法①:将链表元素存在数组中,在数组上…...
一文读懂Redis配置,史上真香配置
文章目录 基本配置项AOF持久化配置项RDB持久化配置项淘汰策略配置项主从复制配置项鸣谢 让那些总为redis连接异常的小白指引明灯,少走弯路。为那些不知道如何进行高级配置的大佬整一杯小酒。 基本配置项 bind:用于设置Redis绑定的IP地址。默认情况下&…...
maven打出jar中动态替换占位符
使用场景: maven打出的jar中pom.xml动态替换占位符 有些时候某些公共工具jar包被项目引用后发现公共jar的pom.xml中的version依然还是占位符,例如下面 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok<…...
数据仓库的设计与实现:从概念到落地
数据仓库的设计与实现:从概念到落地 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农,我深知数据仓库在企业数据管理中的重要性。一个好的数据仓库不仅能帮助企业整合分散的数据,还能为业务决策提供有力支持。今天,我就来聊聊数…...
AI图像放大神器Upscayl:告别模糊时代的终极解决方案
AI图像放大神器Upscayl:告别模糊时代的终极解决方案 【免费下载链接】upscayl 🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trendi…...
PyTorch模型元数据管理实战:用safetensors和safe_open记录训练信息
PyTorch模型元数据管理实战:用safetensors和safe_open记录训练信息 在机器学习项目的生命周期中,模型训练往往只是冰山一角。真正让一个项目具有长期价值的,是那些隐藏在模型权重背后的故事——超参数的选择、数据集的版本、训练过程中的关键…...
别再死磕Release了!用Debug模式打包Qt exe,一次搞定所有dll依赖(附GPT脚本生成技巧)
用Debug模式打包Qt应用:绕过Release陷阱的高效解决方案 当Qt开发者第一次尝试将项目打包成可独立运行的exe文件时,绝大多数教程都会推荐使用Release模式编译。然而在实际操作中,Release模式可能会带来一系列难以排查的问题——从莫名其妙的崩…...
BilibiliDown深度指南:从零掌握B站视频下载的7大核心技巧
BilibiliDown深度指南:从零掌握B站视频下载的7大核心技巧 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirror…...
Verilog新手避坑指南:从HDLBits的Getting Started到Vectors,我踩过的那些坑
Verilog新手避坑指南:从HDLBits的Getting Started到Vectors,我踩过的那些坑 第一次接触Verilog时,我像大多数初学者一样,被它既像C语言又不像C语言的语法搞得晕头转向。HDLBits这个在线练习平台确实是个好帮手,但当我从…...
大模型学习进阶:收藏必备,小白程序员快速掌握RAG架构核心技术!
大模型学习进阶:收藏必备,小白程序员快速掌握RAG架构核心技术! 本文深入解析了RAG(检索增强生成)大模型的核心技术及其重要性,详细介绍了标准RAG、对话式RAG、纠正式RAG、自适应RAG、自我反思RAG、融合RAG、…...
春联生成模型-中文-base实操手册:模型量化(INT4)降低显存占用50%实测
春联生成模型-中文-base实操手册:模型量化(INT4)降低显存占用50%实测 1. 引言 春节将至,写春联是传统习俗,但很多人苦于没有文采写不出好对联。现在有了春联生成模型,只需要输入两个字的祝福词࿰…...
QGIS插件开发实战:手把手教你用Python调用高德地图API做路径规划(附坐标转换避坑指南)
QGIS插件开发实战:Python集成高德地图API的路径规划全流程解析 当我们需要在QGIS中实现路径规划功能时,高德地图API提供了丰富的服务接口。本文将带你从零开始,开发一个能够调用高德地图API进行路径规划的QGIS插件,并重点解决开发…...
避开SDR通信的‘坑’:我在用Pluto做16QAM传输时遇到的相位偏移和同步问题
避开SDR通信的‘坑’:我在用Pluto做16QAM传输时遇到的相位偏移和同步问题 第一次用Pluto SDR搭建16QAM通信链路时,我盯着屏幕上扭曲的星座图发呆了半小时——理论上完美的16个星点,在实际接收时却像被无形的手揉成了一团毛线。这种挫败感想必…...
