You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android与Kannel互传DataMessage:从Kannel接收该消息是否可行?

当然可以实现Kannel接收Android发送的DataMessage!我帮你梳理下具体的实现步骤和关键配置点:

一、Kannel对DataMessage的支持说明

Kannel的smsbox组件本身完全支持处理二进制SMS(也就是你说的DataMessage),核心是要做好Kannel的配置调整,同时确保Android端发送的消息格式符合要求。

二、Kannel配置关键调整

你需要在kannel.conf里做两处核心配置:

  1. SMS中心(smsc)配置:如果用的是GSM模块,确保smsc类型支持二进制消息,比如:
group = smsc
smsc = at
modemtype = auto
device = /dev/ttyUSB0
speed = 115200
binary-sms = yes

binary-sms = yes是开启二进制消息处理的关键参数。

  1. 短信服务(sms-service)配置:添加专门处理二进制消息的路由,把收到的DataMessage转发到你的后端服务(或者做内部处理):
group = sms-service
keyword = default
binary = yes
# 把消息转发到你的后端接口,%p是发送方号码,%b是二进制数据(十六进制格式),%P是消息端口
get-url = "http://your-backend-service.com/receive-data?sender=%p&binary_data=%b&port=%P"
三、Android端发送DataMessage的注意事项

你已经在使用SmsManager.sendDataMessage,这里要注意两个关键参数:

  • 端口(port):发送时指定一个固定端口(比如1234),Kannel可以通过这个端口识别并处理DataMessage,后续Android接收Kannel的DataMessage也可以用同一个端口。
  • 数据长度:GSM二进制SMS的最大长度是140字节,要确保你发送的data参数不超过这个限制。
四、Android Manifest接收配置补充

你提供的SmsReceiver需要补充DataMessage对应的Intent Filter和权限,完整配置示例:

<!-- 必要权限 -->
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<!-- Android 12+ 还需要通知权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

<receiver android:name=".SmsReceiver"
          android:exported="true">
    <intent-filter android:priority="1000">
        <!-- 接收普通文本短信 -->
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        <!-- 接收DataMessage核心Action -->
        <action android:name="android.provider.Telephony.DATA_SMS_RECEIVED" />
        <!-- 指定监听的端口,和发送时的端口保持一致 -->
        <data android:port="1234" />
    </intent-filter>
</receiver>

注意:Android 6.0及以上需要动态申请RECEIVE_SMS和READ_SMS权限,Android 12+还要动态申请POST_NOTIFICATIONS权限。

五、测试验证步骤
  1. 重启Kannel服务,确保新配置生效;
  2. 在Android端调用sendDataMessage发送指定端口的二进制数据到Kannel绑定的号码;
  3. 查看Kannel的日志文件(默认是kannel.log),如果出现类似Received binary SMS from [你的Android号码] port 1234的日志,说明Kannel已经成功接收;
  4. 检查你的后端服务(如果配置了get-url)是否收到转发的请求,验证数据是否正确。

内容的提问来源于stack exchange,提问作者nouha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:51:51