¿Cómo puedo llamar al número de emergencia mediante programación

Puedo llamar al número de teléfono general por los siguientes códigos:

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

En archivo de manifiesto, agrego permiso como a continuación:

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

Como el documento de android explica CALL_PRIVILEGED como esto: Permite que una aplicación llame a cualquier número de teléfono, incluyendo números de emergencia, sin pasar por la interfaz de usuario de Dialer para que el usuario confirme la llamada que está siendo colocada.No para uso de aplicaciones de terceros.

Y mi aplicación se encuentra en los paquetes / aplicaciones , por lo que no es una aplicación de terceros, ¿verdad? Por lo tanto, ¿por qué todavía ir directamente a marcar el teclado no la interfaz de usuario de marcación cada vez que llamo al número de emergencia como '112'?

El código proporcionado ya debería funcionar para esto, pero necesita el permiso CALL_PHONE y CALL_PRIVILEGED para marcar números de emergencia sin mostrar el teclado de marcación.

Referencia de Android – Manifest Permiso CALL_PRIVILEGED

Una vez que se añade al manifiesto, deberías poder usar el mismo código usando la ACTION_CALL vez de marcar directamente:

 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); 

Prueba esto

Si utiliza Action_Dial entonces abrirá el Action_Call directamente y Action_Call call directamente al número especificado.

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

Añadir permiso <uses-permission android:name="android.permission.CALL_PHONE" />

Nota: probado en

  1. Nota de Lenovo K3 ( Marshmallow )
  2. Motorola ( Lollipop )
  3. Micromax A116 ( Kitkat 4.1.2 )

Utilice Action_Dial porque Action_Dial abrirá el Action_Call directamente y Action_Call llamará directamente al número especificado.

Nota: La intención no se puede utilizar para llamar a números de emergencia. Las aplicaciones pueden marcar números de emergencia usando ACTION_DIAL .

Necesita el permiso CALL_PHONE y CALL_PRIVILEGED para marcar números de emergencia sin mostrar el teclado.

Una vez que haya agregado los permisos, pruebe el siguiente código usando la ACTION_CALL vez de marcar directamente:

 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); 

Referencia de Android – Manifest Permiso CALL_PRIVILEGED

 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); 

El permiso necesita el CALL_PHONE y CALL_PRIVILEGED es necesario para llamar. Funciona.

Citando la documentación de Android para el permiso android.permission.CALL_PRIVILEGED :

Permite que una aplicación llame a cualquier número de teléfono, incluyendo números de emergencia, sin pasar por la interfaz de usuario Dialer para que el usuario confirme la llamada que se está colocando.

No es para uso de aplicaciones de terceros.

Valor constante: "android.permission.CALL_PRIVILEGED"

La parte importante: No debe ser utilizada por aplicaciones de terceros.

Por lo tanto, no es posible utilizar un sistema operativo Android no enraizado.

Si se arraigó sin embargo, usted podría hacer su aplicación en una aplicación del sistema y esto funcionaría.

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

Sólo para darle un heads-up, se ha convertido en estándar, especialmente en Europa para todo el número de emergencia que se encaminan automáticamente a: 112. Para cambiar esto a los diferentes números de emergencia en el mundo, (ya que los EE.UU. por ejemplo utiliza 911) Usaría la configuración regional para obtener la región actual y luego llamaría al número de emergencia específico de esa región.

Esto se puede lograr fácilmente mediante una sentencia if.

A continuación, utilice el código siguiente para implementar la parte llamante:

 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); 

Como mencionaste, no olvides añadir los permisos al archivo de manifiesto, de lo contrario la aplicación se bloqueará:

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

Espero que esto ayude 🙂

Los números de emergencia requieren que el usuario dispare la acción por sí mismo.

Marcando 911 (EE. UU.) Es un error que podría generar honorarios.

Trabajé alrededor de un proyecto que llama al 911 cuando un usuario cae. Obviamente, fue para los ancianos y / o las personas heridas. Cuando cae, se llama el número de emergencia.

Ahora tiene dos opciones para simular la "acción humana" como una IA básica.

1) Haga clic en el botón de llamada una vez marcado

Mira la aplicación Phone Android Samples y configura una alarma que realiza un clic en el botón de llamada. La muestra le dará el ID del botón.

2) Pida permiso (y el usuario TIENE que permitirlo) siguiendo el modelo API 23: https://developer.android.com/training/permissions/requesting.html

El manifiesto no es suficiente en este caso.

<uses-permission android:name="android.permission.CALL_PRIVILEGED"/> sólo se concede a las aplicaciones del sistema. Debe instalar su aplicación como aplicación del sistema. Aquí hay un tutorial decente para hacer eso.

Prueba este código siguiente obtendrás tu respuesta

 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(); } 

Y para el permiso usted puede dar

 <uses-permission android:name="android.permission.CALL_PHONE" /> 
  • Llamada de Android con archivo de voz de voz personalizado
  • Android cheque tiene llamada telefónica activa
  • ¿Cómo detecta un sistema operativo Android una llamada entrante?
  • Aplicación de marcador de Android
  • Identificar el evento de conexión de llamada saliente
  • ¿Cómo aceptar una llamada entrante haciendo clic en un botón?
  • Realizar llamadas sin actividad ACTION_CALL
  • Cómo contestar una llamada mediante programación
  • Cómo grabar la llamada en android? ¿Es posible?
  • ¿Cómo realizar una llamada telefónica con intención en Android?
  • Android: Receptor de llamadas entrantes sin permiso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.