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();
}
}