我正在为服务提供商可通过USSD访问的服务实施自动服务检查。服务被构造为交互式菜单。问题在于当前的Android Telephony SDK仅支持单次USSD请求。对于多级USSD交互(菜单,没有API,即发送Ussd响应。
我尝试使用Telephony API实施,该API可以很好地处理单次Ussd请求。但是,服务提供商不支持单次Ussd交互(完整路径Ussd字符串);您必须从主菜单中向下浏览所选的选项。
telephonyManager =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
final Handler handler = new Handler();
final TelephonyManager.UssdResponseCallback callback = new TelephonyManager.UssdResponseCallback() {
@Override
public void onReceiveUssdResponse(TelephonyManager telephonyManager, String request, CharSequence response) {
super.onReceiveUssdResponse(telephonyManager, request, response);
//Log.e(TAG, response.toString());
//ussdScreen.setText(response.toString());
}
@Override
public void onReceiveUssdResponseFailed(TelephonyManager telephonyManager, String request, int failureCode) {
super.onReceiveUssdResponseFailed(telephonyManager, request, failureCode);
String msg = "Ussd failed with code: " + failureCode + ", for request: " + request;
Log.e(TAG, msg);
//Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
}
};
dial = findViewById(R.id.dial);
dial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dial.setEnabled(false);
dial(code.getText().toString(), callback, handler);
}
});
ussdScreen = findViewById(R.id.ussdScreen);
code = findViewById(R.id.code);
所需的功能是具有交互式菜单。一旦Ussd请求返回响应,就应该有一种方法来响应该响应(Ussd提示符),依此类推,直到最后一个屏幕,具体取决于所选的路径(选项)