2016-03-07 58 views
2

我想從模擬器發送短信到模擬器。它可以工作,但只能使用非常有限的字符集(ASCII子集)。如果我有任何以下字符的消息時,這些字符的第一次發生後,什麼將成爲gibrish:模擬器之間發送短信

|, ^, {, }, €, [, ~, ] and \ 

(但我也需要非ASCII字符,例如希伯來字母)

例如,如果我發送Hello^World它會變成Hello ^

或者[Hello:World]變得像[ e ]

這是我使用的代碼:

void sendSms(final String toNumber, final String message) { 
    final SmsManager sm = SmsManager.getDefault(); 
    if (message.getBytes().length <= 160) { 
     sm.sendTextMessage(toNumber, null, message, null, null); 
    } else { 
     ArrayList<String> msgStringArray = sm.divideMessage(message); 
     sm.sendMultipartTextMessage(toNumber, null, msgStringArray, null, null); 
    } 
    Log.v(TAG, "sendSms: " + toNumber + ", " + message + ", " + message.length() + " chars/" + message.getBytes().length + " bytes"); 
} 

我用它來接收消息的代碼是在這裏:Receive an read SMS with correct encoding and convert to UTF8

+0

「接收一個正確的編碼閱讀短信,並轉換爲UTF8」沒有接受的答案 - 你是否複製了「錯誤的代碼」 - 描述編碼問題.... – Cadburry

+0

這也是我的問題。一開始我認爲這是接收方面的問題,現在看起來它甚至在發送。或者介於兩者之間......誰知道......我還向android提交了一個錯誤報告:https://code.google.com/p/android/issues/detail?id = 202723 – Gavriel

+0

SMS使用了7位ASCII碼。這意味着只有非常基本的字符。你需要調用sendMultipartTextMessage來使它與unicode一起工作。 sendTextMessage不會發送特殊的配置數據來告訴運營商它不是7位ascii –

回答

1

這似乎是一個錯誤在仿真器中:https://code.google.com/p/android/issues/detail?id=202723

儘管我沒有立即的解決方案,但值得一提的是, 仿真器2.0包含一個用於向虛擬設備發送SMS消息的UI,當從 發送UI時,上述字符都可以正常工作。如果您需要使用接收設備(但不包含 )發送包含這些字符的SMS消息進行一些測試,那麼應該使用 直到我們追蹤此錯誤。作爲工具25.0的一部分,您可以從預覽版本通道訪問 模擬器2.0。

+0

@MartijnPieters,在我爲這個問題「量身定製」之後,我無法取消刪除答案,所以我添加了一個新答案 – Gavriel

+0

終於有效了! –