如何以编程方式拨打紧急电话号码

sta*_*ust 11 android phone-call

我可以通过以下代码拨打一般电话号码:

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(intent);  
Run Code Online (Sandbox Code Playgroud)

在清单文件中,我添加如下权限:

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED"/>
Run Code Online (Sandbox Code Playgroud)

正如android的doc解释CALL_PRIVILEGED这样:允许应用程序拨打任何电话号码,包括紧急号码,而无需通过Dialer用户界面让用户确认正在拨打的电话.不供第三方应用程序使用.

我的应用程序位于软件包/应用程序中,因此它不是第三方应用程序,对吧?那么,为什么每次拨打"112"这样的紧急号码时,我仍然直接拨打拨号盘而不是拨号用户界面?

M D*_*M D 8

提供的代码应该已经适用于此,但您需要CALL_PHONE并且CALL_PRIVILEGED允许拨打紧急号码而不显示拨号盘.

Android参考 - 清单权限CALL_PRIVILEGED

一旦将其添加到清单中,您应该能够使用相同的代码来ACTION_CALL代替直接拨号:

Uri callUri = Uri.parse("tel://911");
Intent callIntent = new Intent(Intent.ACTION_CALL,callUri);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION);
startActivity(callIntent);
Run Code Online (Sandbox Code Playgroud)

  • 亲爱的,当我添加 CALL_PRIVILEGED 权限时,它显示错误“权限仅授予系统应用程序”? (2认同)

Pra*_*are 6

试试这个

如果你使用Action_Dial那么它会打开dialpad直接Action_Callcall直接在指定的号码.

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("tel:" + "198"));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

添加权限 <uses-permission android:name="android.permission.CALL_PHONE" />

注意:经过测试

  1. 联想K3 Note(Marshmallow)
  2. 摩托罗拉(Lollipop)
  3. Micromax A116(Kitkat 4.1.2)


GrI*_*sHu 2

使用Action_Dial因为Action_Dial将直接打开拨号盘并Action_Call直接拨打指定的号码。

注意: Intent 不能用于拨打紧急号码。应用程序可以使用拨打紧急号码ACTION_DIAL

您需要获得CALL_PHONECALL_PRIVILEGED权限才能在不显示拨号盘的情况下拨打紧急号码。

添加权限后,请尝试使用以下代码ACTION_CALL来代替直接拨号:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION);
 callIntent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(callIntent);
Run Code Online (Sandbox Code Playgroud)

Android 参考 - 清单权限 CALL_PRIVILEGED