【发布时间】:2014-03-17 17:44:27
【问题描述】:
我正在开发一个通过 SMS 向远程设备发送命令的 Android 应用程序。这些命令都是常规的文本消息,其中一些以前缀A@@ 开头。为了测试应用程序,我使用 Android 4.3 手机和 Android 2.3 手机向其他手机发送了一些“命令”。
当我在 Android 4.3 手机上运行该应用程序时,接收端的 SMS 在任何设备上都可以正常显示,但如果我使用 Android 2.3 发送命令,它们会在 Android 4.3 手机上以A¿¿ 形式接收但在 Android 2.3 或 iPhone 上与A@@ 一样正常到达。在目标设备(它使用 GSM 调制解调器)上,消息类似于A(字符“A”加上两个空格 - ASCII 0x20),所以我怀疑发件人使用了不同的编码。我觉得奇怪的是@ 符号甚至不是扩展的 ASCII 字符,所以我想知道为什么它会被编码为 ASCII 以外的其他字符集。
谁能解释这里发生了什么?如果 Android 2.3 设备真的使用了另一种编码,有没有办法在发送 SMS 之前将其强制为 ASCII?
发送代码如下:
@Override
public void sendCommand(String command) {
//TODO: Send SMS with 'command' as its text message
SmsManager sms=SmsManager.getDefault();
PendingIntent piSent=PendingIntent.getBroadcast(this, 0,
new Intent("SMS_SENT"), 0);
PendingIntent piDelivered=PendingIntent.getBroadcast(this, 0,
new Intent("SMS_DELIVERED"), 0);
String phone = txtPhone.getText().toString();
sms.sendTextMessage(phone, null, command, piSent, piDelivered);
}
其中参数command 始终是前缀与其他文本的连接,如下所示:
String SmsPrefix = new String("A@@");
sendCommand(SmsPrefix + "AT+DEACT");
更新:
有人暗示我的问题可能与运营商有关,而不是与 Android 系统本身有关。我住在巴西,我的 Android 2.3 设备使用运营商 TIM,就像我们使用的 iPhone 一样。 Android 4.3 设备使用运营商Claro。我发现,如果我拿到TIM SIM 卡并将其放在Android 4.3 设备上,接收端也会显示乱码@,因此运营商TIM 似乎正在搞乱通过他们发送的短信网络。我将尝试下面@PMunch 的新建议,以便我们可以找到解决方法,但我们可以确定它已经不是从 Android 2.3 到 4.3 更正的某种错误。
【问题讨论】:
-
使用任何相关代码发布您的发送功能。