Cómo declarar permisos de la app

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Como se mencionó en el flujo de trabajo para usar permisos, si la app necesita solicitar permisos, debes declararlos en el archivo de manifiesto. Esto ayuda a que las tiendas de aplicaciones y los usuarios sepan cuál es el conjunto de permisos que podría solicitar tu app.

El proceso para solicitar un permiso depende del tipo de permiso:

Agrega declaración al manifiesto de la app

Para declarar un permiso que tu app pueda solicitar, incluye el elemento <uses-permission> correspondiente en el archivo de manifiesto de tu app. Por ejemplo, una app que necesita acceder a la cámara tiene esta línea en AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

Declara el hardware como opcional

Algunos permisos, como CAMERA, permiten que tu app acceda a hardware que solo tienen algunos dispositivos Android. Si tu app declara uno de estos permisos asociados al hardware, considera si aún puede ejecutarse en un dispositivo que no lo tiene. En la mayoría de los casos, el hardware no es obligatorio, por lo que es mejor establecer android:required en false en tu declaración de <uses-feature>, como se muestra en el siguiente fragmento de código de un archivo AndroidManifest.xml:

<manifest ...>
    <application>
        ...
    </application>
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
<manifest>

Determina la disponibilidad del hardware

Si declaras una parte de hardware como opcional, es posible que tu app se ejecute en dispositivos que no la tengan. Para comprobar si un dispositivo cuenta con una parte específica, usa el método hasSystemFeature(), como se muestra en el siguiente fragmento de código: Si el hardware no está disponible, inhabilita correctamente esa función en la app.

Kotlin

// Check whether your app is running on a device that has a front-facing camera.
if (applicationContext.packageManager.hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Java

// Check whether your app is running on a device that has a front-facing camera.
if (getApplicationContext().getPackageManager().hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Declara permisos por nivel de API

Para declarar un permiso solo en dispositivos que admiten permisos de tiempo de ejecución, es decir, dispositivos con Android 6.0 (nivel de API 23) o versiones posteriores, incluye un elemento <uses-permission-sdk-23> en lugar de <uses-permission>.

Cuando usas cualquiera de estos elementos, puedes configurar el atributo maxSdkVersion para indicar que los dispositivos que ejecutan una versión de Android posterior al valor especificado no necesitan un permiso en particular. Esto te permite eliminar permisos innecesarios y brindar compatibilidad con dispositivos anteriores.

Por ejemplo, tu app puede mostrar contenido multimedia, como fotos o videos, que el usuario creó mientras la usaba. En este caso, no es necesario que uses el permiso READ_EXTERNAL_STORAGE en dispositivos que ejecutan Android 10 (nivel de API 29) ni versiones posteriores, siempre y cuando la app se oriente a estas versiones. Sin embargo, para la compatibilidad con dispositivos anteriores, puedes declarar el permiso READ_EXTERNAL_STORAGE y establecer android:maxSdkVersion en 28.