我编写了一个使用ussd代码的应用程序。我想发送一个ussd的请求,但我不知道如何获取数据并将其保存在字符串中。
示例代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String encodedHash = Uri.encode("#");
String ussd = "*141*1" + encodedHash;
startActivityForResult(new Intent("android.intent.action.CALL",
Uri.parse("tel:" + ussd)), 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(getApplicationContext(),
"USSD: " + requestCode + " " + resultCode + " ", 1).show();
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
// String result=data.getStringExtra("result");
String dd = data.toString();
Toast.makeText(getApplicationContext(), dd, 1).show();
}
}
截图应用程序:
如何解决我的问题?
答案 0 :(得分:2)
使用DIAL或CALL意图直接从自定义活动拨打USSD代码,但是听取返回的结果不是因为Android没有适当支持拦截平台内的USSD调用,而是存在部分但未记录的支持在本机拨号器应用程序中。
首先,请查看Android源代码中的PhoneUtils类。该链接适用于4.0.3,但我相信这部分支持自2.3以来一直存在。
具体来说,查看第217行,正在编写名为“com.android.ussd.IExtendedNetworkService”的意图。所以你需要做的是实现自己的服务来响应这个意图。该服务需要根据IExtendedNetworkService.aidl实施,这是Android框架的一部分。
aidl公开了几个函数,但我们关心的是该服务中的getUserMessage(text)函数。该文本是USSD调用返回的最终值。
注意:
在github here上查看示例代码。