2016-03-04 47 views
0

我正在編寫BroadcastReceiver以接收SMS消息。我將需要將消息與用戶在設置中設置的字符串進行比較,但字符串可能不是ASCII。以下代碼僅適用於僅包含ASCII字符的SMS-es。如何將消息轉換爲UTF8編碼?用正確的編碼接收讀取的短信並將其轉換爲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$

+0

爲什麼要使用UTF-8? Java不使用UTF-8作爲字符串。當使用非ASCII字符時什麼不起作用? –

+0

當我從一個模擬器發送SMS到另一個模擬器,並將消息打印到日誌(我的代碼中的最後一行)時,消息是「垃圾」。另見我的更新 – Gavriel

+0

聽起來就像它只是你的記錄器。請顯示「垃圾」日誌行,可能是字符串的UTF-16十六進制編碼 –

回答