@Mike M. y yo encontramos un problema con la respuesta aceptada (vea nuestros comentarios):
Básicamente, no tiene sentido pasar por el ciclo for si no estamos concatenando el mensaje multiparte cada vez:
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msg_from = msgs[i].getOriginatingAddress();
String msgBody = msgs[i].getMessageBody();
}
Tenga en cuenta que solo establecemos msgBody
el valor de cadena de la parte respectiva del mensaje sin importar el índice en el que estemos, lo que hace que todo el punto de recorrer las diferentes partes del mensaje SMS sea inútil, ya que solo se establecerá en el mismo último valor del índice. En su lugar debemos utilizar +=
, o como señaló Mike, StringBuilder
:
En general, así es como se ve mi código de recepción de SMS:
if (myBundle != null) {
Object[] pdus = (Object[]) myBundle.get("pdus"); // pdus is key for SMS in bundle
//Object [] pdus now contains array of bytes
messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); //Returns one message, in array because multipart message due to sms max char
Message += messages[i].getMessageBody(); // Using +=, because need to add multipart from before also
}
contactNumber = messages[0].getOriginatingAddress(); //This could also be inside the loop, but there is no need
}
Simplemente exponiendo esta respuesta en caso de que alguien más tenga la misma confusión.