Estoy usando el siguiente código para hacer una llamada en Android, pero me está dando una 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)
Esta demostración será útil para usted ...
Al hacer clic en el botón de llamada:
Permiso en manifiesto:
fuente
Opción más elegante:
fuente
Use la acción ACTION_DIAL en su intento, de esta manera no necesitará ningún permiso. La razón por la que necesita el permiso con ACTION_CALL es para hacer una llamada telefónica sin ninguna acción del usuario.
fuente
Todo esta bien.
Acabo de colocar la etiqueta de permisos de llamadas antes de la etiqueta de la aplicación en el archivo de manifiesto
y ahora todo funciona bien.
fuente
NOTA IMPORTANTE:
Si usa
Intent.ACTION_CALL
debe agregarCALL_PHONE
permiso.Solo funciona si no desea que su aplicación aparezca en Google Play para tabletas que no tienen tarjeta SIM o no tienen GSM.
EN TU ACTIVIDAD:
MANIFIESTO:
Entonces, si no es una función crítica para su aplicación, trate de evitar agregar
CALL_PHONE
permisos.OTRA SOLUCIÓN:
Es mostrar la aplicación del teléfono con el número escrito en la pantalla, por lo que el usuario solo tendrá que hacer clic en el botón de llamada:
No se necesita permiso para esto.
fuente
Solo el simple oneliner sin necesidad de permisos adicionales:
fuente
usa este código completo
fuente
Solicitar permiso en manifiesto
Para llamar utiliza este código
fuente
Permiso en AndroidManifest.xml
Código completo:
fuente
Permisos:
Intención:
fuente
También puedes usar esto:
fuente
Para realizar una actividad de llamada utilizando intentos, debe solicitar los permisos adecuados.
Para eso incluye permisos de uso en el archivo AndroidManifest.xml.
Luego incluya el siguiente código en su actividad
fuente
Para llamadas del marcador (no se necesita permiso):
Para llamadas directas desde la aplicación (se necesita permiso):
Permiso:
fuente
Para evitar esto, se puede usar la GUI para ingresar permisos. Eclipse se encarga de dónde insertar la etiqueta de permiso y, a menudo, no es correcto
fuente
fuente
En Android para ciertas funcionalidades, debe agregar el permiso al archivo Manifiesto.
6. Guarde el archivo de manifiesto y luego ejecute su proyecto. Su proyecto ahora debería ejecutarse como se esperaba.
fuente
^ La respuesta se encuentra en la salida de excepción "
requires android.permission.CALL_PHONE
" :)fuente
fuente
fuente