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

sr.*_*zad 13 service android ussd

我编写了一个使用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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

如何解决我的问题?

Gon*_*ndy 2

使用 DIAL 或 CALL 意图从自定义活动中拨打 USSD 代码是直接的,但是监听返回的结果并不是因为 Android 没有在平台内拦截 USSD 呼叫的适当支持,而是因为本机内存在未记录的支持。拨号器应用程序。

\n\n

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

\n\n

具体来说,查看第 217 行,正在编写名为 \xe2\x80\x9ccom.android.ussd.IExtendedNetworkService\xe2\x80\x9d 的意图。因此,您需要做的是实现自己的服务来响应该意图。该服务需要根据IExtendedNetworkService.aidl来实现,它是Android 框架的一部分。

\n\n

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

\n\n

笔记:

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

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

\n