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$
爲什麼要使用UTF-8? Java不使用UTF-8作爲字符串。當使用非ASCII字符時什麼不起作用? –
當我從一個模擬器發送SMS到另一個模擬器,並將消息打印到日誌(我的代碼中的最後一行)時,消息是「垃圾」。另見我的更新 – Gavriel
聽起來就像它只是你的記錄器。請顯示「垃圾」日誌行,可能是字符串的UTF-16十六進制編碼 –