Sobes.tech
Junior

¿Qué tipos de permisos existen en Android?

sobes.tech AI

Respuesta de la IA

En Android, existen varios tipos de permisos que determinan los niveles de acceso de la aplicación a recursos protegidos y datos del usuario.

  • Permisos normales: Permisos con riesgo mínimo. Se otorgan automáticamente al instalar la aplicación y no requieren consentimiento explícito del usuario durante la ejecución. Por ejemplo, acceso a internet (android.permission.INTERNET).
  • Permisos peligrosos: Permisos con alto riesgo. Requieren el consentimiento explícito del usuario durante la ejecución de la aplicación. El acceso a estos recursos puede afectar la privacidad o el funcionamiento del dispositivo. Por ejemplo, acceso a contactos (android.permission.READ_CONTACTS), cámara (android.permission.CAMERA).
  • Permisos de firma: Permisos que pueden ser otorgados a aplicaciones firmadas con el mismo certificado que la aplicación que define el permiso. Se utilizan para controlar el acceso entre componentes de un mismo sistema o conjunto de aplicaciones.
  • Permisos de firma o sistema: Estos permisos pueden ser otorgados a aplicaciones firmadas con el mismo certificado o a aplicaciones que se encuentren en la sección del sistema.

Además, se pueden distinguir:

  • Permisos en tiempo de instalación: Permisos solicitados y otorgados durante la instalación de la aplicación. Incluyen permisos normal y de firma.
  • Permisos en tiempo de ejecución: Permisos solicitados durante la ejecución en dispositivos con Android 6.0 (API nivel 23) y superiores. Incluyen permisos peligrosos.
  • Permisos especiales: Una clase especial de permisos que requieren pasos específicos para ser otorgados. Por ejemplo, superposición sobre otras ventanas (SYSTEM_ALERT_WINDOW) o cambios en la configuración del sistema (WRITE_SETTINGS). No pertenecen ni a normal ni a peligroso.

En el manifiesto de la aplicación se solicitan todos los permisos necesarios:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        ...
        >
        ...
    </application>
</manifest>

La solicitud de permisos peligrosos se realiza en tiempo de ejecución:

// Ejemplo de solicitud de permiso para leer contactos
if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.READ_CONTACTS),
        MY_PERMISSIONS_REQUEST_READ_CONTACTS)

} else {
    // El permiso ya fue concedido, se puede realizar la operación
}