标题似乎与this重复。
然而,当我尝试解决方案并进一步阅读时,才知道 CALL_PRIVILEGED 权限仅适用于系统应用。因此,我想知道是否有任何解决方法。
我想要实现的是非常明显的,直接拨打紧急号码如911而不打开拨号屏幕。 (出于安全考虑,我发现这是不可能的。还在尝试。)
我的假设:(以下步骤是我实现上述目标的愚蠢假设)
一个。使用Action_DIAL意图操作并通过执行此操作打开已拨打911的拨号器屏幕
Intent callIntent = new Intent(Intent.ACTION_DIAL);
callIntent.setData(Uri.parse("tel:" + "911"));
startActivity(callIntent);
这里我的梦想代码开始了。如果只有这些可能。
B中。注册一个接收器,它将检查拨号器是否打开(如果存在,则查找Intent),并且它包含的数字是911。
℃。以编程方式调用CALL按钮的click事件。 (如果可能的话,再次)
如果可能,请告诉我?我也想完成这件事。另外,实现这一目标的任何其他方式都会很棒。
编辑 - 我希望如果没有用户拥有root权限,这是否可行。
答案 0 :(得分:1)
在Manifest
文件中添加这两项权限。
public static final String CALL_PHONE
在API级别1中添加 允许应用程序在不通过拨号器用户界面的情况下发起电话呼叫,以便用户确认正在进行的呼叫。 常量值:“android.permission.CALL_PHONE”
public static final String CALL_PRIVILEGED
在API级别1中添加 允许应用程序拨打任何电话号码(包括紧急号码),而无需通过拨号器用户界面以便用户确认正在进行的呼叫。 不适用于第三方应用程序。 常量值:“android.permission.CALL_PRIVILEGED”
添加到清单后,您可以使用ACTION_CALL
Uri uri = Uri.parse("tel://911");
Intent intent = new Intent(Intent.ACTION_CALL,uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(intent);
更新: 但是,如果您的应用程序将安装在系统分区上(例如,由有根设备的用户)或使用签署其余固件的相同签名密钥签名(例如,由设备制造商或ROM修改器),则可以使用此功能
答案 1 :(得分:1)
这里有2个选项
使用意图 当您使用'Intent.ACTION_DIAL'拨打您在此处完成的呼叫时,您必须了解您总是最终转发应用程序的默认拨号程序,因为您要求操作系统我们需要监听此意图,以便您最终打开一个应用程序。所以使用这种方法无法完成
制作自定义拨号器
我能找到的唯一工作就是你自己制作自定义拨号器,但为此你需要制作自定义ROM。
考虑到你的要求,我不得不说这是不可能的
现在考虑一下你提供的解决方案
以编程方式调用CALL按钮的click事件
由于沙箱限制和安全原因,我真的怀疑这种可能性。