有没有办法在 Android 上强制自动拨打特殊号码?

Is there a means to forcefully autodial special numbers on Android?

我一直在研究 android 应用程序概念,其中应用程序必须自动拨打一些特殊的 USSD 代码,以便在用户启动服务时启动用户感兴趣的某些电信服务通过应用程序中的快捷方式。

我发现的问题是,当应用程序尝试自动拨打此类短代码或 USSD 号码时,phone 的 OS(或者是呼叫意图),不自动拨号,而是在拨号盘中向用户显示 code/number,因此用户必须手动发起呼叫 - 这有点违背了我允许用户仅通过以下方式发起服务的意图单击 - 快捷方式。

目前,这是我发起这些呼叫的方式:

            intent = new Intent(Intent.ACTION_DIAL);

            intent.setData(Uri.parse("tel:" + number.trim()));

            try {
                activity.startActivity(intent);
            } catch (Exception e) {
                Log.d(Tag, e.getMessage());
            }

有趣的是,+256772777000 之类的号码会自动拨号,自动启动用户通话,但 number/code 911、*112#、*1*23# 等号码不会。 t.

那么,我需要做些什么不同的事情,或者这根本不可能?

更新

实际上,查看另一个应用程序,我在其中自动拨打用户指定的号码,上面的代码尝试自动拨打 ussd 代码的问题是我没有使用 intent.ACTION_CALL,而是使用 intent.ACTION_DIAL - 这绝对只是提示用户拨打电话号码,而不是直接拨打电话。当我解决这个问题时,该应用程序现在可以按预期运行。请参阅下面的答案...

非常欢迎代码示例。

实际上,尽管有些人声称 Android 阻止了此类功能。当我查看我的一个自动拨打用户指定号码的旧应用程序中的代码时,我发现解决方案是:

            intent = new Intent(Intent.ACTION_CALL);

            intent.setData(Uri.parse("tel:" + number.trim()));

            try {
                activity.startActivity(intent);
            } catch (Exception e) {
                Log.d(Tag, e.getMessage());
            }

这按预期工作 - USSD 代码在上述代码运行时自动拨号。使用此方法时唯一需要注意的重要事项是,您必须将以下权限添加到您的清单中:

    <uses-permission android:name="android.permission.CALL_PHONE" />

因此,正如我的问题更新中所指出的,我原来的方法的问题是使用 intent.ACTION_DIAL 而不是 intent.ACTION_CALL