2012-02-25 4 views
5

Non ho trovato risposta a questa domanda. Perché la lunghezza di un SMS inviato in modo programmatico da un'istanza dell'emulatore a un'altra viene troncata sul lato ricevente?
Qui mando 20 byte da emulatore-554 a emulatore-556, ma emulatore-556 riceve solo 12 byte: L'SMS di dati Android inviato tra due emulatori viene troncato in transito


emulatore-554: il mittente SMS

/** Send data SMS between two emulators from 15555215554 to 15555215556. */ 
private void sendSMS() 
{ 
    final int udLength = 20; // SMS user data length in bytes 
    Log.d("SMS TEST", "SMSActivity.sendSMS ud.length=" + udLength); 
    byte[] payload = new byte[udLength]; 
    for (byte i = 0; i < udLength; i++) 
    { 
     Log.d("SMS TEST", "payload[" + i + "]=" + i); 
     payload[i] = i; 
    } 

    Intent smsSentIntent = new Intent("SMS_SENT"); 
    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, smsSentIntent, 0); 
    String destTelephone = "15555215556"; 
    SmsManager smsMgr = SmsManager.getDefault();  
    smsMgr.sendDataMessage(destTelephone, null, (short) 32766, payload, sentPI, null); 
    Log.d("SMS TEST", "SMSActivity.sendSMS COMPLETED!"); 
} 

accedere l'emulatore del mittente:

02-25 19: 31: 00,793: D TEST/SMS (257): onCreate
02-25 19:31 : 00.793: D/SMS TEST (257): onResume
02-25 19: 31: 00.823: D/SMS TEST (257): SMSActivity.sendSMS ud.length = 20
02-25 19: 31: 00.823: D/SMS TEST (257): payload [0] = 0
02-25 19: 31: 00.823: D/SMS TEST (257): payload [1] = 1
02-25 19: 31: 00.823: D/SMS TEST (257): payload [2] = 2
02-25 19: 31: 00.823: D/SMS TEST (257): payload [3] = 3
02-25 19: 31: 00.823: D/SMS TEST (257): payload [4] = 4
02-25 19: 31: 00.823: D/SMS TEST (257): payload [5] = 5
02-25 19: 31: 00.823: D/SMS TEST (257): payload [6] = 6
02-25 19: 31: 00.823: D/SMS TEST (257): payload [7] = 7
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [8] = 8
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [9] = 9
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [10] = 10
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [11] = 11
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [12] = 12
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [13] = 13
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [14] = 14
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [15] = 15
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [16] = 16
02-25 19: 31: 00.833: ​​D/SMS TEST (257): payload [17] = 17
02-25 19: 31: 00.853: D/SMS TEST (257): payload [18] = 18
02-25 19: 31: 00.853: D/SMS TEST (257): payload [19] = 19
02-25 19: 31: 00.904: D/SMS TEST (257): SMSActivity.sendSMS COMPLETATO!
02-25 19: 31: 27,044: D/TEST SMS (257): onPause
02-25 19: 31: 27,583: D/TEST SMS (257): onStop


emulatore-556: lo SMS ricevitore

public class SmsReceiver extends BroadcastReceiver 
{ 
    /** BroadcastReceiver listener. */ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) 
     { 
      Bundle bundle = intent.getExtras(); 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      Log.d("SMS TEST", "SmsReceiver.onReceive: pdus.length=" + pdus.length); 
      SmsMessage inboundSMS = SmsMessage.createFromPdu((byte[]) pdus[0]); // pdus.length==1 
      byte[] ud = inboundSMS.getUserData(); 
      int udLength = ud.length; 
      Log.d("SMS TEST", "SmsReceiver.onReceive: ud.length=" + udLength); 
      for (int i = 0; i < udLength; i++) 
      { 
       Log.d("SMS TEST", "ud[" + i + "]=" + ud[i]); 
      } 
      Log.d("SMS TEST", "SmsReceiver.onReceive COMPLETED!"); 
     } 
    } 
} 

Accedere nell'emulatore ricevente:

02-25 19: 31: 01,593: D/TEST SMS (258): SmsReceiver.onReceive: pdus.length = 1
02-25 19 : 31: 01.613: D/SMS TEST (258): SmsReceiver.onReceive: ud.length = 12
02-25 19:31:01.613: D/TEST SMS (258): out [0] = 0
02-25 19: 31: 01 613: D/TEST SMS (258): su [1] = 1
02-25 19:31: 01613: D TEST/SMS (258): su [2] = 2
02-25 19: 31: 01 613: TEST D/SMS (258): la [3] = 3
02-25 19:31: 01613: D TEST/SMS (258): su [4] = 4
02-25 19: 31: 01 613: TEST D/SMS (258): su [5] = 5
02-25 19:31: 01613: D TEST/SMS (258): la [6] = 6
02-25 19: 31: 01 613: TEST D/SMS (258): su [7] = 7
02-25 19:31: 01613: D TEST/SMS (258) a partire da [8] = 8
02-25 19: 31: 01 613: D/TEST SMS (258) su [9] = 02-25 19: 31: 01 623: TEST D/SMS (258): in [10] =
10 02 a 25 19: 31: 01 623: D/TEST SMS (258): in [11] = 3
02-25 19: 31: 01 623: TEST D/SMS (258): SmsReceiver.onReceive COMPLETATO!


come si vede solo i primi 11 byte del messaggio di dati vengono ricevuti ok.
Il pannello di controllo emulatore DDMS Impostazioni delle Data=home, Speed=Full, Latency=None ghiaccio.
Usando: Android Development Toolkit 16.0.1.v201112150204-238534
AVD obiettivo: Android 2.2 (API level 8)
Eclipse SDK 3.6.2

È questo un problema emulatore? Può chiunque altro replicare questo comportamento? Mi è stato bloccato su questo problema per troppo tempo. Qualsiasi aiuto sarebbe molto apprezzato!

risposta

0

potrebbe essere collegato con il numero di porta. Provare a utilizzare il numero di porta inferiore a 256.

+0

ho provato l'invio di dati tramite la porta 28, ma ancora ottenuto lo stesso risultato. –