在Android中定义SMS消息的数据编码

问题描述:

我正在使用适用于Android的SMS apis的应用程序。接收端是一个嵌入式单元,仅支持7位编码的SMS,而我发送的字符串仅包含来自此特定字母表的符号,这使您认为Android会将其编码为7位。但事实并非如此。在Android中定义SMS消息的数据编码

因此,我正在寻找一种方法来指定要使用的编码。请参阅下文,了解我今天的代码。方法gsm7BitPackedToString将字节数组转换为7位字符串,即该字符串只包含7位兼容字符,并从内部android api中复制。

private static boolean sendMessage(String tel,byte[] message,int septets) { 
    SmsManager sms = SmsManager.getDefault(); 
    if (septets != -1) { 
     String a = GsmAlphabet.gsm7BitPackedToString(message,0,septets); 
     sms.sendTextMessage(tel, null, a, null, null); 
     return true; 
    } 
    return false; 
} 

我已经考虑了以下解决方案:

  • 使用某种内部方法,但没有的那些I've read about似乎已经不复存在。
  • 正在发送数据消息,但这需要额外的用户数据头,接收端也不支持。

任何帮助表示赞赏:-)

+0

嗨,您可以添加类或链接你在哪里找到GsmAlphabet?我想通过USSD发送短信,并且遇到了我在ussd代码中发送的字符串的编码问题。如果你愿意,我可以分享我的代码发送ussd消息。谢谢。 – 2011-05-14 18:31:01

+0

GsmAlphabet取自[android开源项目](http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=telephony/java/com/android /internal/telephony/GsmAlphabet.java;h=57d73e3758f5de2d52abc8deca66fd797f3a19e2;hb=HEAD) – 2011-05-16 05:36:41

那么,解决方案并不像看起来那么难。我从android项目借用的GsmAlphabet类有一些编码错误。我用git仓库中的最新版本替换了它,现在它似乎都可以像预期的那样工作。

获得的经验:总是双重和三重检查应该工作的东西。

尝试使用SmsMessage类:

http://developer.android.com/reference/android/telephony/SmsMessage.html

createFromPdu()方法创建SmsMessage对象,并用它在SmsManager发送。

我没有尝试过。祝你好运。

+1

我也看过这个解决方案。我发现的问题是,似乎没有实际发送SmsMessage类的实例作为SMS的方法。也许我只是忽略了一些......? – 2010-08-24 10:46:54