【发布时间】:2015-01-21 21:50:10
【问题描述】:
我一直在研究一个 android 应用程序概念,其中当用户通过应用程序中的快捷方式启动服务时,应用程序必须自动拨打一些特殊的 USSD 代码,以便启动用户感兴趣的某些电信服务.
我发现的问题是,当应用程序尝试自动拨打此类短代码或 USSD 号码时,手机的操作系统(或者是呼叫意图)不会自动拨号,而是向用户显示使用拨号盘中的代码/号码,因此用户必须手动发起呼叫 - 这有点违背了我允许用户一键启动服务的意图 - 快捷方式。
目前,我是这样发起这些调用的:
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 这样的号码会自动拨号,让用户自动加入通话,但像 911、*112#、*1*23# 等号码/代码则不会。
那么,我需要做些什么不同的事情,或者这根本不可能?
更新
实际上,查看我正在自动拨打用户指定号码的另一个应用程序,上述代码尝试自动拨打 ussd 代码的问题在于,我没有使用intent.ACTION_CALL,而是使用intent.ACTION_DIAL - 这绝对是只是提示用户要拨打的号码,而不是直接拨打电话。当我修复它时,该应用程序现在可以按预期工作。请参阅下面的答案...
欢迎提供代码示例。
【问题讨论】:
-
Android 的指导设计理念之一是,您不能做任何可能花费用户金钱或损害他们隐私的事情。如果您完全可以通过 Java API 进行拨号,那么您需要以 root 身份进行拨号。
-
你确定当你使用像“+256772777000”这样的号码时,Android是自动拨号的吗?我复制粘贴了您的代码,但它只显示拨号盘,我必须手动显式拨打电话。同样的内容也写在关于 ACTION_DIAL 的 Android 文档中:这显示了一个带有正在拨打的号码的 UI,允许用户明确发起呼叫。
-
我猜你的意思是 ACTION_CALL?
-
@AADTechnical,当然。我也刚刚意识到这一点,并查看了我的旧代码,确认它适用于 USSD :-) 不过谢谢。
标签: android phone-call ussd