<permiso>

sintaxis:
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" |
                                     "signature" | ...] />
se incluye en:
<manifest>
descripción:
Declara un permiso de seguridad que se usa para limitar el acceso a funciones o componentes específicos de esta y otras aplicaciones. Si deseas obtener más información sobre el funcionamiento de los permisos, consulta la sección Permisos en la descripción general del manifiesto de la app y las Sugerencias de seguridad.
atributos:
android:description
Es una descripción del permiso legible por el usuario, más informativa y extensa que la etiqueta. Puede mostrarse para explicar el permiso al usuario, por ejemplo, cuando se le pregunta si le otorga el permiso a otra aplicación.

Este atributo se configura como referencia a un recurso de cadenas. A diferencia del atributo label, no puede ser una cadena sin procesar.

android:icon
Es una referencia a un recurso de elemento de diseño para un ícono que representa el permiso.
android:label
Es un nombre legible por el usuario para el permiso.

Si así lo prefieres, puedes configurar la etiqueta directamente como una cadena sin procesar mientras desarrollas la aplicación. Sin embargo, cuando la aplicación está lista para publicarse, se debe configurar como referencia a un recurso de cadenas para que se pueda localizar como otras cadenas en la interfaz de usuario.

android:name
Es el nombre que se usará en el código para referirse al permiso, como en un elemento <uses-permission> o los atributos permission de los componentes de la aplicación.

Nota: El sistema no permite que varios paquetes declaren un permiso con el mismo nombre, a menos que todos estén firmados con el mismo certificado. Si un paquete declara un permiso, el sistema no permite al usuario instalar otros paquetes con el mismo nombre de permiso, a menos que estén firmados con el mismo certificado que el primer paquete.

Por este motivo, Google recomienda que agregues prefijos a los permisos con el nombre del paquete de la app a través de la denominación de estilo de dominio inverso. Sigue este prefijo con .permission. y, luego, con una descripción de la capacidad que representa el permiso, en letra mayúscula SNAKE_CASE. Por ejemplo: com.example.myapp.permission.ENGAGE_HYPERSPACE.

Si sigues esta recomendación, se evitan los conflictos de nombres y se ayuda a identificar claramente el propietario y la intención de un permiso personalizado.

android:permissionGroup
Asigna este permiso a un grupo. El valor de este atributo es el nombre del grupo, que se declara con el elemento <permission-group> en esta o en otra aplicación. Si no se establece este atributo, el permiso no pertenece a un grupo.
android:protectionLevel

Caracteriza el riesgo potencial implícito en el permiso y también indica el procedimiento que debe seguir el sistema para determinar si otorga o no dicho permiso a una aplicación que lo solicita.

Cada nivel de protección consta de un tipo de permiso base y cero o más marcas. Por ejemplo, el nivel de protección "dangerous" no tiene marcas. Por el contrario, el nivel de protección "signature|privileged" es una combinación del tipo de permiso base "signature" y la marca "privileged".

La siguiente tabla muestra todos los tipos de permisos básicos. Para ver la lista de marcas, consulta protectionLevel.

Valor Significado
"normal" Es el valor predeterminado. Un permiso de menor riesgo que, con una amenaza mínima para otras aplicaciones, el sistema o el usuario, brinda a las aplicaciones solicitantes acceso a funciones aisladas de la aplicación. El sistema otorga automáticamente este tipo de permiso a una aplicación solicitante durante la instalación sin pedir la aprobación explícita del usuario (aunque este siempre tiene la opción de revisar los permisos antes de la instalación).
"dangerous" Es un permiso de mayor riesgo que le da a una aplicación solicitante acceso a datos privados del usuario o control sobre el dispositivo, que puede afectar negativamente al usuario. Debido a que este tipo de permiso presenta un riesgo potencial, es posible que el sistema no lo otorgue automáticamente a la aplicación solicitante. Por ejemplo, es posible que se muestre al usuario cualquier permiso peligroso solicitado por una aplicación y se le solicite confirmación antes de continuar, o bien se podría adoptar algún otro enfoque para evitar que el usuario permita el uso automático de esas funciones.
"signature" Es un permiso que el sistema otorga solo si la aplicación solicitante está firmada con el mismo certificado que la aplicación que declaró el permiso. Si los certificados coinciden, el sistema otorga automáticamente el permiso sin notificar al usuario ni solicitarle aprobación explícita.
"knownSigner" Se trata de un permiso que el sistema otorga solo si la aplicación solicitante está firmada con un certificado permitido. Si aparece el certificado del solicitante, el sistema otorga automáticamente el permiso sin notificar al usuario ni solicitarle aprobación explícita.
"signatureOrSystem"

Es un antiguo sinónimo de "signature|privileged". Dejó de estar disponible desde el nivel de API 23.

Se trata de un permiso que el sistema otorga solo a las aplicaciones que están en una carpeta dedicada en la imagen del sistema Android o que están firmadas con el mismo certificado que la aplicación que declaró el permiso. Evita usar esta opción, ya que el nivel de protección "signature" es suficiente para la mayoría de las necesidades y funciona independientemente de dónde se instalen las aplicaciones.

El permiso "signatureOrSystem" se usa para ciertas situaciones especiales en las que varios proveedores tienen aplicaciones integradas en una imagen del sistema y necesitan compartir funciones específicas de manera explícita porque se crean juntas.

primera inclusión:
Nivel de API 1
consulta también:
<uses-permission>
<permission-tree>
<permission-group>