Java smslib包开发

news2025/2/22 12:39:12

上一篇文章我详细介绍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 gateway
        SerialModemGateway gateway = new SerialModemGateway("modem", "COM1", 9600, "", "");
        gateway.setInbound(true);
        gateway.setOutbound(true);

        try {
            // Initialize the SMSLib library
            Service.getInstance().addGateway(gateway);
            Service.getInstance().startService();

            // Create the outbound message
            OutboundMessage message = new OutboundMessage("recipientPhoneNumber", "你好世界");
            message.setEncoding(Message.MessageEncodings.ENCUCS2); // 设置编码格式为Unicode

            // Send the message
            Service.getInstance().sendMessage(message);

            // Clean up and stop the service
            Service.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功能发送数据的功能,我在它的基础进行了二次开发实现了网络通讯的功能,如果有需要的小伙伴可以私信我,我将无偿提供我的二开版本源码
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大华智慧园区综合管理平台文件上传漏洞复现

该文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关。…

站点平台技术架构

系统架构部署思维导图 一、前期工作 1.系统保持一致性方案: GIT版本控制:通过总控端向租户端发送一个更新同步请求,租户端收到请求后执行GIT PULL 命令,执行完成命令后会进行获取当前版本指定的SQL文件,进行同步更新…

RTK定位

文章目录 前言什么是 RTKRTK的工作原理网络RTK vs 传统RTK结语 前言 说到定位,相信大家一定不会觉得陌生。如今我们所处的信息时代,人人都有手机。每天,我们都会用到与地图和导航有关的APP。 这些APP,就是基于定位技术的。说到定…

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下: 硬件平台:x86_64(amd64)操作系统:CentOS 7.8 2003数据库版本(含CSDK):GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10?该版本包含QODBC。 1&#…

达到国际领先水平!“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果通过专家组评价

​本文转自中国地理产业协会 评价会现场 8月16日,受广西自然资源产品质量检验中心委托,广西人工智能学会在南宁市采用线上线下结合的形式,组织召开了“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果评价会。由中国科学院院士、…

行为型(六) - 状态模式

一、概念 状态模式(State Pattern):类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 使用场景: 一个对象的行为由它的状态决定,而且它必须在运行时根据自身状态改变它的行为。 二、实现 这里控…

【Java 高阶】一文精通 Spring MVC - 转换器(五)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

期权是什么?期权的优缺点是什么?

期权是一种合约,有看涨期权和看跌期权两种类型,也就是做多和做空两个方向,走势标的物对应大盘指数,这也是期权与其他金融工具的主要区别之一,可以用于套利,对冲股票和激进下跌的风险,下文介绍期…

HTML总结 2[转]

以下转载和参考自:HTML 表单。 1、表格 可以通过 CSS 设置表格的样式: 如下为将上面table.lamp th,td样式中的padding注释掉,开启table.lamp中的padding的效果: 2、列表 3、表单 表单用于收集用户的输入,如下图所…

咨询师需要具备同理心

做咨询的这么多年,经常会听到这样的一些槽点: “也不知道怎么想的,压根就不是正常的思考逻辑!” “上次就是这样,跌到同一条沟里了吧?” “如此简单的事情,推进起来为什么这么难?…

IDC发布中国低代码市场报告,得帆独立低代码市占率第一

近日,国际数据公司IDC公布了《2022下半年中国低代码与零代码软件市场跟踪报告》(以下简称“报告”)。 2022下半年中国低代码与零代码软件市场规模为15.6亿元人民币,得帆低代码PaaS平台凭借过硬的产品优势和深厚的客户实践经验&am…

RK3399平台开发系列讲解(内核调试篇)网络调试工具

🚀返回专栏总目录 文章目录 一、dstat 工具介绍二、例如dstat 进行网络问题调试三、ss 命令查看 TCP 详细信息四、netstat 查看TCP详细信息沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍网络的相关工具。 一、dstat 工具介绍 当设备产生问题,而我们又…

情人节定制:HTML5 Canvas全屏七夕爱心表白特效

❤️ 前言 “这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”,七夕节表白日,你要错过吗?如果你言辞不善,羞于开口的话,可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效,全屏的爱心和…

使用Netplan建立Linux网络,简便的声明性方法

除了周围网络环境的复杂性之外,由于使用的技术堆栈和工具范围很广,Linux 网络可能会令人困惑。网桥、绑定、VRF 或路由的配置可以通过编程、声明、手动或自动化方式使用 ifupdown、ifupdown2、ifupdown-ng、iproute2、NetworkManager、systemd-networkd …

Python土力学与基础工程计算.PDF-土的三项组成

5.3 Python求解 Python 求解代码如下: 1. # 定义已知参数 2. G_s 2.7 # 比重 3. w 0.2 # 含水量 4. e 0.6 # 孔隙比 5. gamma_w 9.81 # 水的重度 6. 7. # 根据公式计算饱和度 8. S_r G_s * w / e 9. print("饱和度为", S_r) 10. 11.…

UbuntuDDE 23.04发布,体验DeepinV23的一个新选择

UbuntuDDE 23.04发布,体验DeepinV23的一个新选择 昨晚网上搜索了一圈,无意看到邮箱一条新闻,UbuntuDDE 23.04发布了 因为前几天刚用虚拟机安装过,所以麻溜的从网站下载了ISO文件,安装上看看。本来没多想,…

亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列

近日,亚信科技AntDB数据库通过GB 18030-2022《信息技术 中文编码字符集》最高实现级别(级别3)检测认证,成为首批通过该认证的数据库产品之一。 图1:AntDB通过GB 18030-2022最高实现级别认证 GB 18030《信息技术 中文编…

得帆信息合伙人——张少伟:使用低代码就像逛宜家,总会有不期而至的小惊喜等着你

随着数字化、智能化、网络化、自动化阶段不断跃升,新技术不断涌现,数字化转型成了大多数企业的发展趋势。在这个背景下,以下问题是被提起次数较多的: 企业要不要买低代码?低代码到底能做什么系统?低代码适合…

Memtester的使用(xilinx zc706)

1.1:测试概述 Memtester主要是针对内存压测的工具,官方的解释:testing the memory subsystem for faults。主要是捕获内存错误和一直处于很高或者很低位的坏位,测试随机值、异或比较、减法、乘法、除法、与或运算等。memtester 是…

情感书单背景素材分享,轻松把书单制作成视频

在互联网时代,我们可以通过各种方式来分享自己的想法和创意。其中,视频是一种非常受欢迎的方式,它可以将图像、声音和文字有机地结合在一起,形成一个丰富多彩的信息载体。如果你想分享自己的情感书单,那么将其制作成视…