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

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

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

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

 <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PRIVILEGED"/> 

作为Android的文档解释CALL_PRIVILEGED是这样的: 允许应用程序调用任何电话号码,包括紧急电话号码,而无需通过拨号用户界面的用户来确认呼叫被放置。不供第三方应用程序使用。

而我的应用程序位于软件包/应用程序 ,所以它不是第三方应用程序,对不对? 那么,为什么每次拨打紧急号码如112,我还是直接拨打拨号键而不是拨号用户界面呢?

Solutions Collecting From Web of "如何以编程方式拨打紧急电话号码?"

提供的代码应该已经为此工作,但您需要CALL_PHONECALL_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); 

尝试这个

如果使用Action_Dial则直接打开dialpadAction_Call将直接call指定的号码。

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

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

注意:testing

  1. 联想K3笔记Marshmallow
  2. 摩托罗拉Lollipop
  3. Micromax A116Kitkat 4.1.2

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

注意:意图不能用于拨打紧急号码。 应用程序可以使用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); 

Android参考 – 清单权限CALL_PRIVILEGED

只是为了提醒你,所有的紧急号码都被自动路由到了欧洲,特别是在欧洲已经成为标准:112.为了把这个变成世界上不同的紧急电话号码(因为美国例如使用911)将使用区域设置获取当前区域,然后调用特定于该区域的紧急号码。

这可以通过if语句轻松实现。

然后使用下面的代码来实现调用部分:

 Uri callUri = Uri.parse("tel://emergencyNum"); Intent callIntent = new Intent(Intent.ACTION_CALL,callUri); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION); startActivity(callIntent); 

正如您所提到的,不要忘记将权限添加到清单文件,否则应用程序将崩溃:

 <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PRIVILEGED"/> 

希望这可以帮助 :)

我testing了一个有效的东西…

您必须检测电话号码是否为紧急号码(在SIM卡中编码),然后在号码末尾添加“+”号码(如果有的话)。 我用其他标志或数字进行testing,但没有奏效(通话已完成,但未达到服务)。

我把她的代码从Orasi(一个视障人士的软件)

 // Lance un appel public static void CallNumber(Activity activity, String szNumber) { Intent intent = new Intent(Intent.ACTION_CALL); if(PhoneNumberUtils.isEmergencyNumber(szNumber)) { szNumber += "+"; } intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_USER_ACTION); intent.setData(GetUriForCall(szNumber)); activity.startActivity(intent); } 

GetUriForCall对符号进行编码。 我也把代码放在这里:

 // Retourne une URI pour appel téléphonique, avec adaptation encodage caratères public static Uri GetUriForCall(String szNumber) { String szOutNumber = szNumber.replace("*", Uri.encode("*")).replace("#",Uri.encode("#")); return Uri.parse("tel:" + szOutNumber); } 

我在法国,而且我已经testing了'112',这被视为一个紧急号码。 有用 !

请注意,通常情况下,15(SAMU),18(消防部门)和17(警察)的紧急情况号码不被SIM卡视为紧急事件号码,而是作为正常号码工作。 此外,911被视为一个,即使你不能在这里打这个号码的人…

所以我认为在添加“+”之前testing数字是很重要的。 还要注意我编码'*'和'#',而不是'+',所以它可以解释为什么这不符合这些迹象。

希望这可以帮助

 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:" + any number)); startActivity(callIntent); 

权限需要调用CALL_PHONECALL_PRIVILEGED 。 有用。

引用Android文档的权限android.permission.CALL_PRIVILEGED

允许应用程式拨打任何电话号码(包括紧急电话号码),而无需通过拨号程式使用者介面让使用者确认所拨打的电话。

不适用于第三方应用程序。

常量值:“android.permission.CALL_PRIVILEGED”

重要部分: 不适用于第三方应用程序。

因此,使用非root的Android操作系统是不可能的

如果它是根植的,那么你可以把你的应用程序变成一个系统应用程序,这将工作。

来源: https : //developer.android.com/reference/android/Manifest.permission.html#CALL_PRIVILEGED

紧急电话号码要求用户自己发起行动。

拨打911(美国)是一个可以产生费用的错误。

我曾经在一个用户掉下来的时候打过911的项目。 显然,这是为了老年人和/或受伤的人。 当他跌倒时,紧急电话号码被呼叫。

你现在有两个select来模拟“人类行动”作为一个基本的AI。

1)拨打一次通话button

看看电话应用程序的Android样品,并设置一个警报,在呼叫button上执行clic。 该示例将为您提供buttonID。

2)请求权限(并且用户必须允许)遵循API 23模式: https : //developer.android.com/training/permissions/requesting.html

在这种情况下,清单是不够的。

<uses-permission android:name="android.permission.CALL_PRIVILEGED"/>仅授予系统应用程序。 您需要将系统安装为系统应用程序。 这是一个体面的教程来做到这一点。

尝试下面的代码,你会得到你的答案

 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:112"); try { startActivity(intent); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(getContext(), "Can't make a call", Toast.LENGTH_SHORT).show(); } 

并允许你可以给

 <uses-permission android:name="android.permission.CALL_PHONE" /> 

清单中不需要权限。 拨打紧急拨号器意向:

 try { Intent callIntent = new Intent("com.android.phone.EmergencyDialer.DIAL"); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_USER_ACTION); callIntent.setData(Uri.parse("tel:112")); // < Optional, will prompt number for user startActivity(callIntent); } catch (Exception e) { // in case something went wrong ... }