接收具有正确编码的读取SMS并转换为UTF8

时间:2016-03-04 13:24:05

标签: android utf-8 character-encoding broadcastreceiver sms

我正在编写BroadcastReceiver来接收短信。我需要将消息与用户在设置中设置的字符串进行比较,但字符串可以是非ASCII。以下代码仅适用于仅包含ASCII字符的SMS-es。如何将邮件转换为UTF8编码?

public class SmsReceiver extends BroadcastReceiver {
    final static String TAG = "SmsReceiver";

    public SmsReceiver() {
    }

    @Override
    public void onReceive(final Context context, final Intent intent) {
        final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {
                final Object[] pdusObj = (Object[]) bundle.get("pdus");
                for (int i = 0; i < pdusObj.length; i++) {

                    final SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
                    final String senderNum = currentMessage.getDisplayOriginatingAddress();

                    final String message = currentMessage.getDisplayMessageBody();

                    Log.i(TAG, "senderNum: " + senderNum + "; message: " + message);

更新

似乎相同的代码在我的Nexus5上运行,但在使用API​​ 10的模拟器中不起作用。

我发送的文字:שלום

我收到的文字:éRΨ¿Ñ u$

1 个答案:

答案 0 :(得分:0)

为了记录,如果其他人遇到类似的问题,它似乎是模拟器中的一个错误。我为Android模拟器打开了一张票: https://code.google.com/p/android/issues/detail?id=202723