继续USSD请求(Android)
众所周知,菜单驱动的USSD应用程序总是按照预先定义的顺序获取参数。例如 用户发送111斯里兰卡,并通过返回其子菜单号获得一个包含约12个子项的菜单供选择。然后,它可能会要求从一组子菜单中选择另一个。发送号码等,发送pin,发送电话号码以重新加载(如果正在重新加载),然后发送yes1 No 2以确认,然后发送99以完成USSD事件。 我已经成功地使用诺基亚ASHA 501的蓝牙输出com端口,从VB.NET向手机发送连续信号,如下所示继续USSD请求(Android),android,ussd,Android,Ussd,众所周知,菜单驱动的USSD应用程序总是按照预先定义的顺序获取参数。例如 用户发送111斯里兰卡,并通过返回其子菜单号获得一个包含约12个子项的菜单供选择。然后,它可能会要求从一组子菜单中选择另一个。发送号码等,发送pin,发送电话号码以重新加载(如果正在重新加载),然后发送yes1 No 2以确认,然后发送99以完成USSD事件。 我已经成功地使用诺基亚ASHA 501的蓝牙输出com端口,从VB.NET向手机发送连续信号,如下所示 strCommand = "AT+CUSD=
strCommand = "AT+CUSD=1," & Chr(34) & "#111#" & Chr(34) & ",15" & vbCrLf
comport.Write(strCommand)
Thread.Sleep(5000)
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菜单。如果有任何返回的错误,例如com不允许错误拨号USSD,则com port.DataReceived的DataReceivedHandler可以为您提供。
接下来我将发送的是响应字符串包含OK
strCommand = "AT+CUSD=1," & Chr(34) & "1" & Chr(34) & ",15" & vbCrLf
comport.Write(strCommand)
Thread.Sleep(5000)
再次检查OK等。这是有效的,我想从Android上做这件事。
成功获取第一个菜单,如下所示
strCommand = "AT+CUSD=1," & Chr(34) & "#111#" & Chr(34) & ",15" & vbCrLf
comport.Write(strCommand)
Thread.Sleep(5000)
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这样的好地方采集的,它们正在工作。我自己得到了答案。替换了名为encodedHash+111+encodedHash的行;用这个。CallEncodeHash+121*1*1*1*99+encodedHash;您必须根据您的供应商了解USSD的每个功能。我通过每个函数得到了这个结果,我在这里给出的一个函数是将彩票结果作为短信发送到手机上