Observação: em alguns casos, as permissões que você solicita por <uses-permission> podem afetar como o aplicativo é filtrado pelo Google Play.

Se você solicitar uma permissão relacionada a hardware, CAMERA, por exemplo, o Google Play presume que o aplicativo exige o recurso de hardware básico e filtra o aplicativo pelos dispositivos que não oferecem o recurso.

Para controlar a filtragem, sempre declare os recursos de hardware explicitamente nos elementos <uses-feature>, em vez de confiar que o Google Play vai "descobrir" os requisitos nos elementos <uses-permission>. Então, se quiser desativar a filtragem para um recurso específico, é possível adicionar um atributo android:required="false" à declaração <uses-feature>.

Para ver uma lista de permissões que exigem recursos de hardware, consulte a documentação do elemento <uses-feature>.

sintaxe:
<uses-permission android:name="string"
        android:maxSdkVersion="integer" />
contido em:
<manifest>
descrição:
Especifica uma permissão do sistema que precisa ser concedida pelo usuário para que o app funcione corretamente. Permissões são concedidas pelo usuário quando o aplicativo é instalado (em dispositivos com Android 5.1 ou mais antigos) ou enquanto o app está em execução (em dispositivos com Android 6.0 ou mais recentes).

Para ver mais informações sobre permissões, consulte a seção Permissões na introdução e o guia de API de Permissões do sistema. Uma lista de permissões definidas pela plataforma base pode ser encontrada em android.Manifest.permission.

atributos:
android:name
O nome da permissão. Pode ser uma permissão definida pelo aplicativo com o elemento <permission>, uma permissão definida por outro aplicativo ou uma das permissões padrão do sistema (como "android.permission.CAMERA" ou "android.permission.READ_CONTACTS"). Como esses exemplos mostram, um nome de permissão normalmente inclui o nome do pacote como um prefixo.
android:maxSdkVersion
O nível mais alto da API em que essa permissão precisa ser concedida ao app. Definir esse atributo é útil se a permissão exigida pelo app não for mais necessária a partir de um determinado nível da API.

Por exemplo, a partir do Android 4.4 (nível 19 da API), não é mais necessário que o app solicite a permissão WRITE_EXTERNAL_STORAGE quando quiser gravar nos próprios diretórios específicos do app no armazenamento externo (os diretórios fornecidos por getExternalFilesDir()), mas a permissão é obrigatória para o nível 18 da API e anteriores. Assim, é possível declarar que esta permissão seja necessária somente até o nível da API 18 com uma declaração como esta:

<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />

E a partir do nível 19 da API, o sistema não vai conceder mais a permissão WRITE_EXTERNAL_STORAGE ao aplicativo.

Esse atributo foi adicionado no nível 19 da API.

implementação:
Nível 1 da API
veja também: