2013-06-22 2 views
0

Я пытаюсь запрограммировать приложение Android, которое отправляет обновление с телефона на сервер сетевых провайдеров с использованием USSD. Проблема в том, что для получения данных с сетевого сервера на мой веб-сервер мне нужны данные в кодированной в базе64 Datagram. Формат, который я пытаюсь отправить этим данным, это: * #, где датаграмма состоит из Это позволяет мне отправлять 2 дейтаграммы в одном пакете USSD.Отправить Base64 закодированные данные по USSD с Android

Это то, что я до сих пор

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

И ваш вопрос ...? – CommonsWare

ответ

0

С Intent.ACTION_CALL текстом Base64 будет преобразован в числовые А, В, С, 2, D, E, F 3 и так далее (по умолчанию поведение OutgoingCallReceiver). Таким образом, нет возможности отправлять текстовые данные USSD в Android (по крайней мере стандартными методами) ...