我需要知道如何使用我的SmSMessage类在我的设备上获得输入短信的编码在我的广播接收机类中。
显然,我不能使用以下代码:
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
msg_str += msgs[i].getMessageBody();
}
StringBufferInputStream buf = new StringBufferInputStream(msgs[0].getMessageBody());
InputStreamReader reader = new InputStreamReader(buf);
String encode = reader.getEncoding();因为这将返回java的默认编码,即(UTF-8)。
我需要检查短信是在GSM7,8位,还是UTF-16编码。
发布于 2012-10-19 13:16:42
我们可以使用calculateLength类的SMSMessage函数。
这将返回一个int 4,其中int 0是SMS所需的数量,int 1是使用的代码单元数,int 2是直到下一条消息为止的代码单元数。int 3是应该用于消息的编码类型。
发布于 2012-10-19 11:19:01
我猜想,短信:s通常是用GSM 03.38编码的。这可能是Android文档中提到的“无线电专用编码”。
发布于 2013-05-29 18:31:45
安卓系统在ENCODING_16BIT类中已经有固定的定义ENCODING_7BIT、ENCODING_8BIT、ENCODING_UNKNOWN,这与3 3GPP 03.38中的数据编码方案相对应。然而,有趣的是,它们没有被用于公共方法的回报价值。
因此,最好的解决办法是:
getPdu()获取整个SMS TPDU字节解析DCS字节的示例代码如下所示:
public static byte getSmsDcsType(byte dcs)
{
// Notes:
// ------
// the (SMS) DCS value according to 3GPP TS 03.38 / TS 23.038 is coded as follow:
// 0xxx00xx = GSM 7-bit default alphabet (packed format)
// 0xxx01xx = 8-bit data (unpacked-format)
// 0xxx10xx = UCS2 uncompressed format
// 0xxx11xx = reserved
// 10xxxxxx = reserved
// 110xxxxx = GSM 7-bit default alphabet (packed format)
// 1110xxxx = UCS2 uncompressed format
// 111100xx = GSM 7-bit default alphabet (packed format)
// 111101xx = 8-bit data (unpacked-format)
// 11111xxx = reserved
if (((byte) (dcs & (byte) 0x8C) == 0x00)
|| ((byte) (dcs & (byte) 0xE0) == (byte) 0xC0)
|| ((byte) (dcs & (byte) 0xFC) == (byte) 0xF0))
{
return SmsMessage.ENCODING_7BIT;
}
else if (((byte) (dcs & (byte) 0x8C) == 0x04) || ((byte) (dcs & (byte) 0xFC) == (byte) 0xF4))
{
return SmsMessage.ENCODING_8BIT;
}
else if (((byte) (dcs & (byte) 0x8C) == 0x08) || ((byte) (dcs & (byte) 0xF0) == (byte) 0xE0))
{
return SmsMessage.ENCODING_16BIT;
}
return SmsMessage.ENCODING_UNKNOWN;
}https://stackoverflow.com/questions/12973072
复制相似问题