0

I am trying to program an Android app which sends an update from the phone to my network providers server using USSD. The problem is that to get the data from the network server to my webs server I need the data in a base64 encoded Datagram. The format I am trying to send this data in is*# where the datagram is made up of This allows me to send 2 datagrams in the single USSD packet.

This is what I have so far

private void sendUSSDupdate(Integer data1, Integer data2){

    char[] data1CharArray = data1.toString().toCharArray();
    char[] data2CharArray = data2.toString().toCharArray();

    Integer data1Length = data1CharArray.length * 2;
    Integer data2Length = data2CharArray.length * 2;

    char[] dataDatagram = new String( PID.toString() + data1Length.toString() + new String( data1CharArray ) ).toCharArray();
    char[] dataDatagram = new String( PID.toString() + data2Length.toString() + new String( data2CharArray ) ).toCharArray();

    String ussdAddress = "*126*5*";

    byte[] data1ByteArray = new byte[data1Datagram.length * 2];
    ByteBuffer.wrap(data1ByteArray).asCharBuffer().put(data1Datagram);

    byte[] data2ByteArray = new byte[data2Datagram.length * 2];
    ByteBuffer.wrap(data2ByteArray).asCharBuffer().put(data2Datagram);

    byte[] base64data1Datagram = Base64.encode( dataByteArray, Base64.NO_PADDING );
    byte[] base64data2Datagram = Base64.encode( dataByteArray, Base64.NO_PADDING );


    byte[] dat = new byte[base64data1Datagram.length + base64data2Datagram.length];
    int i = 0;
    while( i < base64data1Datagram.length - 1 ){
        dat[i] = base64data1Datagram[i];
        i++;
    }
    int j = 0;

    while( i < dat.length - 1){
        dat[i] = base64data2Datagram[j];
        i++;
    }

    try{
        Intent ussdIntent = new Intent(Intent.ACTION_CALL);
        ussdIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        ussdIntent.setFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
        ussdIntent.setFlags(Intent.FLAG_FROM_BACKGROUND);
        Uri uri = Uri.fromParts("tel", ussd + dat, encodedHash);
        System.err.println(uri);
        ussdIntent.setData(uri);
        act.startActivity(ussdIntent);
    } catch ( Exception e ) {
        System.err.println( e.getMessage() );
        e.printStackTrace();
    }
}
ChocPanda
  • 88
  • 6

1 Answers1

0

With Intent.ACTION_CALL your Base64 text will be converted to numeric A,B,C to 2, D,E,F to 3 and so on (default behaviour of OutgoingCallReceiver). So, no way to send text data by USSD in Android (at least with standard methods)...

solo999
  • 171
  • 1
  • 4