¿Cómo realizar una llamada telefónica con intención en Android?

Estoy usando el siguiente código para hacer una llamada en Android, pero me está dando la excepción de seguridad por favor ayuda.

posted_by = "111-333-222-4"; String uri = "tel:" + posted_by.trim() ; Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse(uri)); startActivity(intent); 

Permisos

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

Excepción

 11-25 14:47:01.661: ERROR/AndroidRuntime(302): Uncaught handler: thread main exiting due to uncaught exception 11-25 14:47:01.681: ERROR/AndroidRuntime(302): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:111-333-222-4 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{43d32508 302:com.Finditnear/10026} (pid=302, uid=10026) requires android.permission.CALL_PHONE 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.os.Parcel.readException(Parcel.java:1218) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.os.Parcel.readException(Parcel.java:1206) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1214) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.Activity.startActivityForResult(Activity.java:2749) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.app.Activity.startActivity(Activity.java:2855) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at com.Finditnear.PostDetail$2$1$1$1.onClick(PostDetail.java:604) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.widget.ListView.performItemClick(ListView.java:3285) 11-25 14:47:01.681: ERROR/AndroidRuntime(302): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640) 

Puede utilizar Intent.ACTION_DIAL lugar de Intent.ACTION_CALL . Esto muestra el marcador con el número ya ingresado, pero permite al usuario decidir si realmente realizar la llamada o no. ACTION_DIAL no requiere el permiso CALL_PHONE .

Esta demo te será de ayuda …

En el botón de clic de llamada:

 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number")); startActivity(intent); 

Permiso en Manifiesto:

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

Opción más elegante:

 String phone = "+34666777888"; Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null)); startActivity(intent); 

Todo esta bien.

Acabo de colocar la etiqueta de permisos de llamada antes de la etiqueta de aplicación en el archivo de manifiesto

Y ahora todo está funcionando bien.

Sólo el oneliner simple sin los permisos adicionales necesarios:

 private void dialContactPhone(final String phoneNumber) { startActivity(new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phoneNumber, null))); } 

Utilizar este código completo

  Intent callIntent = new Intent(Intent.ACTION_DIAL); callIntent.setData(Uri.parse("tel:"+Uri.encode(PhoneNum.trim()))); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(callIntent); 

Solicitud de permiso en el manifiesto

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

Para llamadas use este código

 Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:99xxxxxxxx")); try { startActivity(in); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(mcontext, "Could not find an activity to place the call.", Toast.LENGTH_SHORT).show(); } 

Permisos:

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

Intención:

 Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:0377778888")); startActivity(callIntent); 

Usted puede utilizar esto también:

 String uri = "tel:" + posted_by.replaceAll("[^0-9|\\+]", ""); 

Utilice la acción ACTION_DIAL en su intención, de esta manera no necesitará ningún permiso. La razón por la que necesita el permiso con ACTION_CALL es hacer una llamada telefónica sin ninguna acción del usuario.

 Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("1234567890")) startActivity(intent); 

Para evitar esto, se puede usar la GUI para ingresar permisos. Eclipse se encarga de dónde insertar la etiqueta de permiso y más a menudo entonces no es correcto

En Android para ciertas funcionalidades es necesario agregar el permiso al archivo de manifiesto.

  1. Vaya a los proyectos AndroidManifest.xml
  2. Haga clic en la pestaña Permisos
  3. Haga clic en Agregar
  4. Seleccionar Usos Permiso
  5. Vea la instantánea abajo Introduzca aquí la descripción de la imagen

6. Guarda el archivo de manifiesto y luego ejecuta tu proyecto. Su proyecto ahora debe funcionar como esperado.

 11-25 14:47:01.681: ERROR/AndroidRuntime(302): blah blah...requires android.permission.CALL_PHONE 

^ La respuesta está en la salida de excepción " requires android.permission.CALL_PHONE " 🙂

  final public void Call(View view){ try { EditText editt=(EditText)findViewById(R.id.ed1); String str=editt.getText().toString(); Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+str)); startActivity(intent); } catch (android.content.ActivityNotFoundException e){ Toast.makeText(getApplicationContext(),"App failed",Toast.LENGTH_LONG).show(); } 

NOTA IMPORTANTE:

Si utiliza Intent.ACTION_CALL debe agregar permiso CALL_PHONE .

Su okey solamente si usted no desea que su app aparezca para las tabletas que no toma la tarjeta de SIM o no tiene G / M.

EN SU ACTIVIDAD:

  Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER)); startActivity(callIntent); 

MANIFIESTO:

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

Así que si no es una característica crítica de su aplicación, intente mantenerse alejado de agregar el permiso CALL_PHONE .

OTRA SOLUCIÓN:

Es para mostrar la aplicación Teléfono con el número escrito en la pantalla, por lo que el usuario sólo tendrá que hacer clic en el botón de llamada:

  Intent dialIntent = new Intent(Intent.ACTION_DIAL); dialIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER)); startActivity(dialIntent); 

No se necesita permiso para esto.

Creo que solo necesitas agregar un permiso en tu manifiesto:

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

Esto eliminará su excepción de seguridad.

  • ¿Cómo puedo hacer una llamada telefónica en android y volver a mi actividad cuando se realiza la llamada?
  • Reenvío de llamadas
  • Llamada de Android con archivo de voz de voz personalizado
  • ¿Cómo hacer una llamada telefónica mediante programación?
  • No se ha encontrado actividad para manejar la acción intencional.
  • Identificar el evento de conexión de llamada saliente
  • Cómo saber a callee se contesta la llamada (¿Cuál es el estado del teléfono cuando levanta la llamada)
  • ¿Cómo realizar llamadas perdidas?
  • Android: ¿Puedes enviar / recibir datos a lo largo de una llamada telefónica?
  • Android: Receptor de llamadas entrantes sin permiso
  • MediaPlayer No se detiene cuando se recibe una llamada telefónica
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.