2015-01-21 52 views
1

我一直在研究一个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 - 这绝对只是提示用户拨打号码,而不直接呼叫。当我解决这个问题时,该应用程序现在按预期工作。请参阅下面的答案...

代码示例是最受欢迎的。

+0

Android的指导性设计理念之一就是你不能做任何可能花费用户金钱或危害他们隐私的事情。如果您可以通过Java API完成任务,那么拨打号码正是您需要做的根本事情。 – 2015-01-21 08:42:24

+0

你确定当你使用数字如“+256772777000”,Android是自动拨号吗?我复制粘贴你的代码,但它只是显示拨号盘,我不得不明确拨打电话,手动。在关于ACTION_DIAL的Android文档中也写了同样的内容:这显示了一个用户界面,拨打的号码允许用户明确发起呼叫。 – AADProgramming 2015-01-21 12:54:14

+0

我想你的意思是ACTION_CALL? – AADProgramming 2015-01-21 13:29:34

回答

0

实际上,尽管有些人声称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

相关问题