В настоящее время я работаю с Диспетчером телефонии (USSD response), доступным в Android Api Level 26 (Nexus 6P). Для одностадийной сессии ussd, это работает.
пример:
USSD-запрос: "A" (инициируется сессия ussd)
USSD-ответ: "X" (сессия ussd завершается)
TelephonyManager = telephonyManager(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Handler handler = new Handler();
TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() {
@Override
public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {
super.onReceiveUssdResponse(telephonyManager, request, response);
Log.e("ussd",response.toString());
}
@Override
public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);
Log.e("ussd","failed with code " + Integer.toString(failureCode));
}
};
try {
Log.e("ussd","trying to send ussd request");
telephonyManager.sendUssdRequest("*123#",
callback,
handler);
}catch (Exception e){
String msg= e.getMessage();
Log.e("DEBUG",e.toString());
e.printStackTrace();
}
но для интерактивного запроса-ответа ussd (многошаговый) он не работает. Многоступенчатый сценарий выглядит следующим образом:
шаг 1.
USSD-запрос: "A" (инициируется сессия ussd)
USSD ответ: "X"
шаг 2.
USSD-запрос: "B" (сеанс ussd продолжается)
USSD ответ: "Y"
шаг 3.
USSD запрос: "C"
USSD ответ: "Z" (сессия ussd завершается)