Android:向不同的运营商发送短信(@转换为?)

荒野

我在向不同的运营商发送SMS时遇到问题:“ @”被翻译为“?”。我的邮件使用UTF-8编码,我使用以下代码:

SmsManager manager = SmsManager.getDefault();   
PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);

String message = new String(new String("@").getBytes("UTF-8"))
manager.sendTextMessage(phonenumber, null,  message , piSend, piDelivered);

谢谢!

笔记:

我尝试使用下面的代码,但出现了问题。在某些操作系统(例如Windows Phone 8)上,SMS从不发送。

manager.sendDataMessage(phonenumber, null, (short) 8091, message.getBytes(), piSend,     
piDelivered);
雷米·勒博(Remy Lebeau)

的第三个参数sendTextMessage()是普通的String无需将A转换String为UTF-8编码的byte[]数组,然后再转换回A String(特别是因为您没有正确执行上一次转换)。getBytes()完全摆脱掉,"@"按原样使用

String message = "@";
manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);

或者简单地:

manager.sendTextMessage(phonenumber, null, "@", piSend, piDelivered);

改为使用getBytes()确实有意义sendDataMessage()

更新:做一些研究,我发现SMS可以使用三种不同的字符编码之一。GSM-03.38编码中,@字符通常编码为octet 0x00,而不是0x40像标准ASCII兼容字符集那样编码为octet 因此,如果您的设备内部使用GSM编码,则可能会对运营商造成一些问题。如果您的设备没有自动为您处理数据,则您可能不得不使用它sendDataMessage()来将String数据编码为UTF-16(我希望Android在内部处理该数据,但谁知道它是否确实可以处理)。如果要发送国际字符或其他非字母数字字符,则可能仍然需要这样做:

manager.sendDataMessage(phonenumber, null, 8091, message.getBytes("UTF-16"), piSend,     

piDelivered);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章