簡體   English   中英

通過Android通過USSD發送Base64編碼的數據

[英]Send Base64 encoded data over USSD from Android

我正在嘗試編寫一個Android應用程序,以便使用USSD將更新從手機發送到我的網絡提供商服務器。 問題在於,要將數據從網絡服務器獲取到我的Web服務器,我需要以base64編碼的數據報中的數據。 我嘗試發送此數據的格式為* #數據報的組成位置這使我可以在單個USSD數據包中發送2個數據報。

這就是我到目前為止

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

使用Intent.ACTION_CALL,您的Base64文本將轉換為數字A,B,C轉換為2,D,E,F轉換為3,依此類推(OutgoingCallReceiver的默認行為)。 因此,無法通過Android的USSD發送文本數據(至少使用標准方法)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM