2011-11-07 18 views
8

En una de mis aplicaciones que estoy usando el siguiente código para emitir una llamada telefónica:¿Se requiere permiso cuando se usa la intención de llamar al teléfono?

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(...)); 
startActivity(intent); 

Los documentos dicen que necesito el permiso siguiente Manifiesto de hacerlo:

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

¿Este realmente requerido? No entiendo la diferencia entre un teléfono y una función de cámara. Cuando se utiliza un intento de teléfono que necesita un permiso, pero no necesito el permiso para un intento de cámara:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
... 
startActivityForResult(intent, 1); 

¿Hay una lista de características de hardware que necesitan un permiso si disparado con la ayuda de una intención y aquellos que no?

Respuesta

12

¿es realmente necesario?

Sí.

No entiendo la diferencia entre un teléfono y una función de cámara.

Las llamadas telefónicas pueden costar dinero a las personas. Por lo tanto, si realiza una llamada telefónica directamente (frente al ACTION_DIAL para simplemente poner el número en el marcador), Android quiere que el usuario acceda de antemano para permitir esto.

Tomar fotografías con la cámara no suele costar directamente a los usuarios dinero.

¿Hay una lista de características de hardware que necesitan un permiso si se activan con la ayuda de un intento y las que no?

Realmente no.

+0

Muchas gracias. Lo entiendo ahora. –

+0

Tropecé con esta respuesta por casualidad ahora. ¿Debería actualizarse (la última parte) con el siguiente enlace: http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference? – Shaihi

+1

@Shaihi: No realmente. El OP realmente se preguntaba qué acciones 'Intento' implican ciertos permisos, que no están cubiertos por el enlace que proporcionó. – CommonsWare

1

Cuando realiza una solicitud a la cámara, simplemente abre una aplicación que requiere la interacción del usuario antes de que pueda hacer nada.

Las llamadas telefónicas abren una aplicación con el número de teléfono ya ingresado, por lo que simplemente tiene que presionar un botón.

Hay un riesgo mucho mayor de que accidentalmente se le llama a alguien que si tuviera que tomar accidentalmente una imagen (que sólo podría eliminar si se toma de forma accidental.)

+0

Muchas gracias. –

19

En realidad, si desea simplemente abrir el marcador con un número de teléfono específico, sin llamada directa (necesita confirmación del usuario), puede hacerlo sin ningún tipo de permiso:

startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + PhoneNumber))); 
+0

Esto resolvió mi problema. Esto le dará al usuario control sobre lo que sucede. – Umair

Cuestiones relacionadas