Conforme mencionado no fluxo de trabalho para uso de permissões, se o app solicitar permissões, declare-as no arquivo de manifesto do app. Essas declarações ajudam as app stores e os usuários a entender o conjunto de permissões que seu app pode solicitar.
O processo para solicitar uma permissão depende do tipo dela:
- Se for uma permissão de instalação, como uma permissão normal ou de assinatura, ela será concedida automaticamente no momento da instalação.
- Se a permissão for de execução ou especial e se o app estiver instalado em um dispositivo com Android 6.0 (nível da API 23) ou mais recente, solicite a permissão de execução ou a permissão especial.
Adicionar declaração ao manifesto do app
Para declarar uma permissão que seu app pode solicitar, inclua o elemento
<uses-permission>
adequado no
arquivo de manifesto do app. Por exemplo, um app que precisa acessar a câmera
tem esta linha em AndroidManifest.xml
:
<manifest ...> <uses-permission android:name="android.permission.CAMERA"/> <application ...> ... </application> </manifest>
Declarar hardware como opcional
Algumas permissões, como
CAMERA
, autorizam que o app
acesse partes de hardware que apenas alguns dispositivos Android têm. Se o app
declarar uma dessas permissões associadas ao hardware,
considere a possibilidade de que o app ainda pode ser executado em um dispositivo que não tenha esse
hardware. Na maioria dos casos, o hardware é opcional, então é melhor declará-lo como tal, definindo android:required
como false
na sua
declaração <uses-feature>
, conforme
mostrado neste snippet de código de um arquivo AndroidManifest.xml
:
<manifest ...> <application> ... </application> <uses-feature android:name="android.hardware.camera" android:required="false" /> <manifest>
Determinar a disponibilidade de hardware
Caso você declare o hardware como opcional, é possível que seu app seja executado em um
dispositivo que não tenha esse hardware. Para verificar se um dispositivo tem um hardware específico,
use o método hasSystemFeature()
, conforme mostrado no snippet de código a seguir. Se o hardware não estiver disponível,
simplesmente desative esse recurso no 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. }
Declarar permissões por nível de API
Para declarar uma permissão apenas em dispositivos com suporte a permissões de execução, ou seja,
dispositivos com o Android 6.0 (nível 23 da API) ou versões mais recentes, inclua o
elemento <uses-permission-sdk-23>
em vez do
elemento <uses-permission>
.
Ao usar qualquer um desses elementos, você pode definir o atributo maxSdkVersion
para indicar que dispositivos com uma versão do Android mais recente que
a indicada não precisam de uma permissão específica. Isso permite
eliminar permissões desnecessárias e ainda oferecer compatibilidade
com dispositivos mais antigos.
Por exemplo, seu app pode mostrar conteúdo de mídia, como fotos
ou vídeos, criado pelo usuário durante o uso. Nessa situação,
você não precisa usar a permissão
READ_EXTERNAL_STORAGE
em dispositivos com
o Android 10 (nível 29 da API) ou mais recente, desde que o app seja voltado para o
Android 10 ou mais recente. No entanto, para suporte a dispositivos mais antigos,
é possível declarar a permissão READ_EXTERNAL_STORAGE
e definir
android:maxSdkVersion
como 28.