我一直在研究一个android应用程序的概念,其中应用程序必须自动拨打一些特殊的USSD代码,以便在用户通过应用程序中的快捷方式启动服务时启动用户感兴趣的某些电信服务。有没有办法在Android上强制自动拨号特殊号码?
我发现的问题是,当应用程序尝试自动拨打这样的短代码或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#等不会。
那么,我需要做什么改变,或者这是不可能的呢?
UPDATE
其实,看着其他的应用程序中,我autodialling用户指定的号码,与上面的代码试图将问题自动拨号USSD代码是不是使用intent.ACTION_CALL
,我用intent.ACTION_DIAL
- 这绝对只是提示用户拨打号码,而不直接呼叫。当我解决这个问题时,该应用程序现在按预期工作。请参阅下面的答案...
代码示例是最受欢迎的。
Android的指导性设计理念之一就是你不能做任何可能花费用户金钱或危害他们隐私的事情。如果您可以通过Java API完成任务,那么拨打号码正是您需要做的根本事情。 – 2015-01-21 08:42:24
你确定当你使用数字如“+256772777000”,Android是自动拨号吗?我复制粘贴你的代码,但它只是显示拨号盘,我不得不明确拨打电话,手动。在关于ACTION_DIAL的Android文档中也写了同样的内容:这显示了一个用户界面,拨打的号码允许用户明确发起呼叫。 – AADProgramming 2015-01-21 12:54:14
我想你的意思是ACTION_CALL? – AADProgramming 2015-01-21 13:29:34