¿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
- Cómo grabar la llamada en android? ¿Es posible?
- Cómo importar com.android.internal.telephony.ITelephony a la aplicación de Android
- ¿Cómo aceptar una llamada entrante haciendo clic en un botón?
- Android: Hacer una llamada telefónica desde el servicio
- Realizar llamadas sin actividad ACTION_CALL
<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)
- Listener para el final de la llamada en Android
- Desvío de llamadas de android mediante programación
- ¿Cómo puedo llamar al número de emergencia mediante programación
- Cómo obtener el número de teléfono mediante el registro de llamadas de android?
- Cómo contestar una llamada mediante programación
- ¿Qué información puedo obtener durante una llamada telefónica utilizando la API de Android?
- ¿Es posible reproducir música durante las llamadas para que el interlocutor pueda escucharla? Androide
- Aplicación de marcador de Android
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.
- Vaya a los proyectos AndroidManifest.xml
- Haga clic en la pestaña Permisos
- Haga clic en Agregar
- Seleccionar Usos Permiso
- Vea la instantánea abajo
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.
- Error: (26, 0) Gradle Método DSL no encontrado: 'runProguard ()'
- Dispositivo de puente de depuración de Android (adb): sin permisos