我正在開發一個加密短信應用程序,我正在將短信加密到3DES,並且我試圖使用SmsManager.sendDataMessage將字節數組結果發送到另一個手機,但我無法讀取在接收方電話右字節數組,例如:在android中發送非打印字符二進制短信
我的應用程序發送該數組:
[0,1,2,3,4,5,6,7,-100,-101,-105,-110]
和在其它電話,我只接收(如果幸運)
[0,1,2,3,4]
我試圖用許多編碼發送文本,但它不工作。
我在模擬器和設備上試過,行爲是一樣的。
我試着從可打印的字符(字母,數字)發送字節,它的作品完美,所以我 認爲這個問題是非打印字節,但我需要發送字節槽sms ....朋友製作類似的東西,但使用黑莓和它工作得很好。
我在做什麼錯?
這對於發送代碼:
SmsManager manager = SmsManager.getDefault();
byte[] arrBytes = new byte[]{0,1,2,3,4,5,6,7,-100,-101,-105,-110};
manager.sendDataMessage(number, null, (short)0, arrBytes, null, null);
這是用於接收的碼:
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle = intent.getExtras();
SmsMessage[] smsMensajes = null;
if(bundle != null){
try{
Object[] pdus = (Object[]) bundle.get("pdus");
smsMensajes = new SmsMessage[pdus.length];
byte[] msjByte = new byte[100];
for(int i=0; i < smsMensajes.length; i++){
smsMensajes[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msjByte = smsMensajes[i].getUserData();
}
}
catch(Exception e){
Log.e("Recibiendo SMS", e.toString());
}
}
}
}
感謝提前:)
我試圖以字節方式發送字節,而不是以文本方式發送,但我不知道爲什麼,我發送的字節沒有收到。而且,base64是一個選項,但我們正試圖通過它減少我們可以通過SMS傳輸的數據長度來避免它。我在嘗試字節,因爲我的朋友用黑莓做了它,我認爲android可以做bb可以做的事情。而且因爲bb必須要知道android發送和android必須知道bb發送的內容,換句話說,短信將從設備發送到另一個設備。 – oware
@oware:問題是,就API而言,SMS本質上是一種文本媒體。您不能以字節方式發送「字節」,因爲您只能根據文本與API進行通信。雖然您可以嘗試查找適當的字符來映射每個二進制值,但我認爲您很可能會遇到不同平臺以不同方式解碼SMS的問題。繼續嘗試,如果你願意,但我強*相信是base64是最強大的方式去這裏,它會爲你節省很多心痛。 –
那麼,我們最終使用base64來編碼字節並通過短信發送它......我會將您的答案標記爲正確的,因爲您建議這樣做。謝謝 – oware