众所周知,菜单驱动的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这样的好地方,而且它们正在运作 。