Cómo declarar permisos de la app

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 realizar una solicitud de 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, el manifiesto de una app que necesita acceder a la cámara incluiría la siguiente línea:

AndroidManifest.xml

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

Declara el hardware como opcional

Algunos permisos, como CAMERA, le otorgan a tu app acceso a partes de hardware que solo algunos dispositivos Android tienen. Si tu app declara uno de estos permisos asociados al hardware, considera si podrá ejecutarse en algún dispositivo que no tenga ese hardware. 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> y declararlo como opcional, como se muestra en el siguiente fragmento de código:

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 los elementos mencionados, puedes establecer el atributo maxSdkVersion, que indica que los dispositivos que ejecutan una versión posterior a maxSdkVersion no necesitan un permiso en particular.