Cree una PDU para Android que funcione con SmsMessage.createFromPdu () (GSM 3gpp)
Gol: (NOTA: La respuesta seleccionada genera una PDU GSM (3gpp)) paraCDMA (3gpp2) por favor refiérase aquí
Para crear una PDU que se pueda pasar aSmsMessage.createFromPdu(byte[] pdu)
. Estoy "transmitiendo un intento" a uno de misBroadcastReciever
que escucha los mensajes SMS.
UnoBroadcastReciever
Utilizandoandroid.provider.Telephony.SMS_RECEIVED
para"real" SMS's
Usando una costumbreintent-filter
acción para estos nuevos"SMS de aplicación".
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];
// getting SMS information from Pdu.
for (int i = 0; i < pdusObj.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}
for (SmsMessage currentMessage : messages) {
//the currentMessage.getDisplayOriginatingAddress()
//or .getDisplayMessageBody() is null if I Broadcast a fake sms
Log.i("BB", "address:"+currentMessage.getDisplayOriginatingAddress()+" message:"+currentMessage.getDisplayMessageBody());
...
Así que quiero miBroadcastReciever
para poder manejar ambos tipos de mensajes sin agregar código adicional
(sí sé que puedo tener una diferenteBroadcastReciever
para los diferentesintent-filter
acción, pero me gustaría realmente llevar a cabo esto, ya que sé que se puede hacer, soy terco)
Investigación:
He estado investigando todo el día / noche. He intentado escribir el mío, aunque soy muy terrible con las matemáticas y las conversiones y creando un algoritmo adecuado. He mirado por encimaApilar temas en PDUsyCrear PDU Android Pero el enlace está roto en la respuesta. Incluso mirécom.google.android.mms.pdu
código fuente
Hasta ahora solo he podido crear una PDU sin un "dirección de origen"usando algún código dehttp://www.wrankl.de/JavaPC/SMSTools.html
PDU:
destino: 555 mensaje: helloworld
"1100038155f50000aa0ae8329bfdbebfe56c32"
Lo que obviamente no es válido ...
Notas al margen:
No planeo hacer nada con la PDU además del uso local, no quiero PDU codificadas en mi código porque no estoy reutilizando la PDU.
Si hay algo que pueda agregar al código que estoy usando para agregar un"dirección de origen", que funcionará. ¿O alguien tiene información sobre una biblioteca que no conozco?
Gracias
Actualizaciones:
intentó
byte[] by =(byte[])(SmsMessage.getSubmitPdu("12345", "1234", "hello", false).encodedMessage);
Lo que me da lo siguiente (en representación hexadecimal).
"0000100200000000000000000000000004010203040000000e000320ec400107102e8cbb366f00"
no funcionó