No he podido encontrar una respuesta publicada a esta pregunta. ¿Por qué la longitud de un SMS de datos enviado programáticamente de una instancia de emulador a otra se trunca en el extremo receptor?
Aquí enviar 20 bytes de emulador-554 a emulador-556, pero emulador-556 recibe sólo 12 bytes: Los datos de Android SMS enviados entre dos emuladores se truncaron en tránsito
emulador-554: el remitente de 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!");
}
Inicie sesión en el emulador del remitente:
02-25 19: 31: 00.793: PRUEBA D/SMS (257): onCreate
02-25 19:31 : 00.793: PRUEBA D/SMS (257): onResume
02-25 19: 31: 00.823: PRUEBA D/SMS (257): SMSActivity.sendSMS ud.length = 20
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [0] = 0
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [1] = 1
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [2] = 2
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [3] = 3
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [4] = 4
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [5] = 5
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [6] = 6
02-25 19: 31: 00.823: PRUEBA D/SMS (257): carga útil [7] = 7
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [8] = 8
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [9] = 9
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [10] = 10
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [11] = 11
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [12] = 12
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [13] = 13
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [14] = 14
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [15] = 15
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [16] = 16
02-25 19: 31: 00.833: PRUEBA D/SMS (257): carga útil [17] = 17
02-25 19: 31: 00.853: PRUEBA D/SMS (257): carga útil [18] = 18
02-25 19: 31: 00.853: PRUEBA D/SMS (257): carga útil [19] = 19
02-25 19: 31: 00.904: PRUEBA D/SMS (257): SMSActivity.sendSMS COMPLETADO!
02-25 19: 31: 27.044: D/TEST SMS (257): onPause
02-25 19: 31: 27.583: D/TEST SMS (257): onStop
emulador-556: el SMS receptor
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!");
}
}
}
Log en el emulador de recepción:
02-25 19: 31: 01,593: D/TEST SMS (258): SmsReceiver.onReceive: pdus.length = 1
02-25 19 : 31: 01.613: PRUEBA D/SMS (258): SmsReceiver.onReceive: ud.length = 12
02-25 19:31:01.613: D/TEST SMS (258): Fuera [0] = 0
02-25 19: 31: 01 613: D/TEST SMS (258): Fuera [1] = 1
02-25 19:31: 01613: D/TEST SMS (258): fuera [2] = 2
02-25 19: 31: 01 613: D/SMS TEST (258): fuera [3] = 3
02-25 19:31: 01613: D/TEST SMS (258): fuera [4] = 4
02-25 19: 31: 01 613: D/SMS TEST (258): fuera [5] = 5
02-25 19:31: 01613: D/TEST SMS (258): fuera [6] = 6
02-25 19: 31: 01 613: D/SMS TEST (258): fuera [7] = 7
02-25 19:31: 01613: D/TEST SMS (258): a partir de [8] = 8
02-25 19: 31: 01 613: D/TEST SMS (258) hacia fuera [9] = 02-25 19: 31: 01 623: TEST D/SMS (258): en [10] =
octubre 2 a 25 19: 31: 01 623: D/TEST SMS (258): en [11] = 3
02-25 19: 31: 01 623: Ensayo D/SMS (258): SmsReceiver.onReceive FINALIZADO!
Como se puede ver sólo los primeros 11 bytes del mensaje de datos se reciben bien.
El panel de control emulador DDMS settings
Data=home, Speed=Full, Latency=None
hielo.
Usando:
Android Development Toolkit 16.0.1.v201112150204-238534
AVD objetivo:
Android 2.2 (API level 8)
Eclipse SDK 3.6.2
es esto un problema emulador? Puede cualquiera otro replicar este comportamiento? Se me ha pegado en este problema durante mucho tiempo. Cualquier ayuda sería muy apreciada!
me trataron envío de datos utilizando el puerto 28, pero todavía tiene el mismo resultado. –