继续USSD请求(Android)

时间:2015-08-30 17:37:25

标签: android ussd

众所周知,菜单驱动的USSD应用程序始终具有预先定义的参数输入顺序。例如: 用户发送#111#(斯里兰卡),并通过发送其子菜单号来获取大约12个子项的菜单。然后它可能会要求从一组子菜单中选择另一个。发送号码等并发送pin,发送电话号码重新加载(如果正在重新加载)然后发送yes(1)no(2)确认然后99完成USSD事件。
我已经成功地使用NOKIA ASHA 501(使用其蓝牙传出com端口)从VB.NET向手机发送继续信号,如下所示。

        strCommand = "AT+CUSD=1," & Chr(34) & "#111#" & Chr(34) & ",15" & vbCrLf
        comport.Write(strCommand)
        Thread.Sleep(5000)

这将打开USSD菜单。 com端口port.DataReceived的DataReceivedHandler可以为您提供是否返回任何错误,例如com未向错误拨号USSD打开。
接下来我将发送响应字符串包含"确定"

    strCommand = "AT+CUSD=1," & Chr(34) & "1" & Chr(34) & ",15" & vbCrLf
    comport.Write(strCommand)
    Thread.Sleep(5000)

再次检查确定等。这有效,我想从Android做到这一点。 成功获得第一个菜单如下。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.button1);

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            String encodedHash = Uri.encode("#");
            call(encodedHash + "111" + encodedHash);
        }
    });
}

protected void call(String phoneNumber) {
    try {
        startActivityForResult(
                new Intent("android.intent.action.CALL", Uri.parse("tel:"
                        + phoneNumber)), 1);
    } catch (Exception e) {
        view.append("\n Here \n " + "\n" + e.toString() + " hi");//
    }
}

到目前为止一切顺利 我不需要阅读USSD的回复。只想发送下一个命令,如" 1"到相同的USSD线程,睡眠时间为4/5秒。 如果我使用相同的方式,它会调出另一个调用数字" 1"

的线程
String encodedHash = Uri.encode("#");
            call(encodedHash + "1" + encodedHash);
startActivityForResult(
                new Intent("android.intent.action.CALL", Uri.parse("tel:"
                        + phoneNumber)), 1);

尝试了许多事情(没有任何来自旋转的文件的任何导致)。
提前致谢。 上面所有这些鳕鱼都来自像stackoverflow这样的好地方,而且它们正在运作

0 个答案:

没有答案