繁体   English   中英

如何从Android的USSD代码获取响应?

[英]How to Get Response from USSD code from Android?

我编写了一个使用ussd代码的应用程序。 我想发送一个ussd的请求,但我不知道如何获取数据并将其保存在String中。

示例代码:

@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();
        }

    }

截图应用程序: 在此输入图像描述

在此输入图像描述

如何解决我的问题?

从自定义活动拨打USSD代码是直接使用DIAL或CALL意图,但是听取返回的结果并不是因为Android没有适当的支持来拦截平台内的USSD调用,但是在本机中存在部分无证支持拨号申请。

首先,请查看Android源代码中的PhoneUtils类。 该链接适用于4.0.3,但我相信这部分支持自2.3以来一直存在。

具体来说,查看第217行,正在编写名为“com.android.ussd.IExtendedNetworkService”的意图。 所以你需要做的是实现自己的服务来响应这个意图。 该服务需要根据IExtendedNetworkService.aidl实现,它是Android框架的一部分。

aidl公开了几个函数,但我们关心的是该服务中的getUserMessage(text)函数。 该文本是USSD调用返回的最终值。

笔记:

  • 由于服务是由PhoneUtils绑定的,因此您需要在手机启动时启动该服务。 这也意味着对服务的任何修改都需要重启电话。
  • 从getUserMessage返回null将禁止拨号器显示USSD结果,但无法完全隐藏拨号程序。
  • 您还可以使用其他功能更改呼叫正在进行时显示的文本。
  • 这似乎不适用于USSD提示(菜单),仅适用于最终结果。

这里查看github上的示例代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM