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ó

Respuestas a la pregunta(3)

Su respuesta a la pregunta