我一直在开发一个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代码的问题是,我使用{{1}而不是使用intent.ACTION_CALL
而不是intent.ACTION_DIAL
- 这肯定只是提示用户拨打号码而不直接呼叫它。当我修复它时,应用程序现在按预期工作。见下面的答案......
非常欢迎代码示例。
答案 0 :(得分: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
。