在Android中拨打911或紧急号码

时间:2014-05-21 10:51:55

标签: android android-intent android-broadcast android-permissions

标题似乎与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权限,这是否可行。

2 个答案:

答案 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修改器),则可以使用此功能

Reference

答案 1 :(得分:1)

这里有2个选项

  1. 使用意图 当您使用'Intent.ACTION_DIAL'拨打您在此处完成的呼叫时,您必须了解您总是最终转发应用程序的默认拨号程序,因为您要求操作系统我们需要监听此意图,以便您最终打开一个应用程序。所以使用这种方法无法完成

  2. 制作自定义拨号器
    我能找到的唯一工作就是你自己制作自定义拨号器,但为此你需要制作自定义ROM。

  3. 考虑到你的要求,我不得不说这是不可能的

    现在考虑一下你提供的解决方案

      

    以编程方式调用CALL按钮的click事件

    由于沙箱限制和安全原因,我真的怀疑这种可能性。