Acessando Permissão no Android Usando React Native;
Tags: android, reactnative, programming
Published: 2023-04-04 19:31:19

Quando se desenvolve um aplicativo móvel com React Native e Expo, é importante garantir que o aplicativo tenha as permissões necessárias para acessar os recursos do dispositivo, como a câmera, o microfone, a localização e outras funcionalidades.

Neste artigo, iremos explorar como gerenciar permissões de dispositivos em um aplicativo React Native usando a biblioteca Expo Permissions.


**Sobre Permissões do dispositivo -**

As permissões de dispositivo são recursos que permitem ao aplicativo acessar recursos do dispositivo, como a câmera, o microfone, a localização e outras funcionalidades. O objetivo das permissões é garantir que o usuário tenha controle sobre o que o aplicativo pode acessar e como pode usar esses recursos.

No entanto, as permissões nem sempre são necessárias para todos os recursos do dispositivo. Por exemplo, se o aplicativo não precisa acessar a câmera, não faz sentido solicitar permissão para isso. É importante que os desenvolvedores de aplicativos móveis entendam quais permissões são necessárias para cada recurso e solicitem apenas as permissões necessárias.

**Verificando permissões**

Antes de solicitar uma permissão, é importante verificar se ela já foi concedida. O método Permissions.askAsync(permission) pode ser usado para verificar se a permissão foi concedida ou não. Este método retorna um objeto que contém informações sobre a permissão, incluindo o status da permissão.


```
import { Permissions } from 'expo';

async function checkCameraPermission() {
  const { status } = await Permissions.askAsync(Permissions.CAMERA);
  if (status === 'granted') {
    console.log('Permissão da câmera concedida');
  } else {
    console.log('Permissão da câmera negada');
  }
}
```

**Solicitando Permissões -**

Para solicitar uma permissão, você pode usar o método Permissions.askAsync(permission). Este método solicita a permissão especificada e retorna um objeto que contém informações sobre a permissão.


```
import { Permissions } from 'expo';

async function requestCameraPermission() {
  const { status } = await Permissions.askAsync(Permissions.CAMERA);
  if (status === 'granted') {
    console.log('Permissão da câmera concedida');
  } else {
    console.log('Permissão da câmera negada');
  }
}
```

Podemos também aproveitar e mostrar como é feita uma requisição conjunta de muitas outras, veja o exemplo a seguir:

```
import { Permissions } from 'expo';

async function requestPermissions() {
  const { status } = await Permissions.askAsync([
    Permissions.CAMERA,
    Permissions.LOCATION,
    Permissions.CONTACTS,
  ]);
  if (status === 'granted') {
    console.log('Permissões concedidas');
  } else {
    console.log('Alguma permissão foi negada');
}
}
```

Vale mencionar que devido as novas exigências de segurança do sistema Android nos últimos anos, alguns apps que não especificarem ao painel da PlayStore o motivo de estarem utilizando certas permissões, serão bloqueadas e impedidas de realizar um novo upload a público. 

Como nesse artigo utilizamos utilizamos exemplos fazendo uso do Expo. Caso você não configure essas permissões, o expo atribuirá TODAS as permissões suportadas pelo expo. Essas são as permissões:

- ACCESS_COARSE_LOCATION
- ACCESS_FINE_LOCATION
- ACCESS_BACKGROUND_LOCATION
- CAMERA
- RECORD_AUDIO
- READ_CONTACTS
- WRITE_CONTACTS
- READ_CALENDAR
- WRITE_CALENDAR
- READ_EXTERNAL_STORAGE
- WRITE_EXTERNAL_STORAGE
- USE_FINGERPRINT
- USE_BIOMETRIC
- WRITE_SETTINGS
- VIBRATE
- READ_PHONE_STATE
- com.anddoes.launcher.permission.UPDATE_COUNT
- com.android.launcher.permission.INSTALL_SHORTCUT
- com.google.android.c2dm.permission.RECEIVE
- com.google.android.gms.permission.ACTIVITY_RECOGNITION
- com.google.android.providers.gsf.permission.READ_GSERVICES
- com.htc.launcher.permission.READ_SETTINGS
- com.htc.launcher.permission.UPDATE_SHORTCUT
- com.majeur.launcher.permission.UPDATE_BADGE
- com.sec.android.provider.badge.permission.READ
- com.sec.android.provider.badge.permission.WRITE
- com.sonyericsson.home.permission.BROADCAST_BADGE

Mas caso você só precise dos requisitos mínimos para o seu aplicativo, você pode apenas definir “permissions” com um array vazio.

A configuração das permissões são bem simples. Nós fazemos isso no arquivo app.json(ou app.tsx, se estiver usando TypeScript), na chave onde configuramos as propriedades do Android. Por exemplo vejamos uma imagem de requisição de apenas duas permissões:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tzg2l0v2m0rjhu0yqnka.png)

Espero que este artigo tenha ajudado a como usar diversas permissões no desenvolvimento de sua aplicação no Android.