Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import Constants from 'expo-constants';
import * as IntentLauncher from 'expo-intent-launcher';
import * as Permissions from 'expo-permissions';
import { Alert, Linking, Platform } from 'react-native';
const PermissionName = {
[Permissions.CAMERA]: 'The Camera',
[Permissions.LOCATION]: 'GPS',
[Permissions.CAMERA_ROLL]: 'The Gallery',
[Permissions.AUDIO_RECORDING]: 'The Microphone',
[Permissions.NOTIFICATIONS]: 'Push Notifications',
[Permissions.USER_FACING_NOTIFICATIONS]: 'Notifications',
[Permissions.CONTACTS]: 'Your Contacts',
[Permissions.CALENDAR]: 'Calendar',
[Permissions.REMINDERS]: 'Reminders',
};
// Use a controlled prompt to ensure you retain access to the permission prompt.
// If the user rejects the controlled prompt, you can always prompt them again when they're ready.
// Otherwise you'll need to redirect the user to the system settings.
export async function controlledPromptAsync(permission, permissionReason, redirectReason) {
const { status } = await Permissions.getAsync(permission);
if (status === 'denied') {
return requestAsync(permission, false, permissionReason || redirectReason);
} else if (status === 'granted') {
return true;
}
return new Promise(resolve => {
Alert.alert(
`Please Turn On ${PermissionName[permission]}`,
_askForReminderPermissions = async () => {
if (Platform.OS === 'android') return true;
const response = await Permissions.askAsync(Permissions.REMINDERS);
const granted = response.status === 'granted';
this.setState({
haveReminderPermissions: granted,
});
return granted;
}
onPress={() =>
this.invokePermissionsFunction(
...[
Permissions.CAMERA,
Permissions.AUDIO_RECORDING,
Permissions.LOCATION,
Permissions.USER_FACING_NOTIFICATIONS,
Permissions.NOTIFICATIONS,
Permissions.CONTACTS,
Permissions.SYSTEM_BRIGHTNESS,
Permissions.CAMERA_ROLL,
Permissions.CALENDAR,
Permissions.REMINDERS,
]
)
}
import React, { useEffect, useState } from 'react'
import { Button, ScrollView, Text, View } from 'react-native'
import Example from '../example'
const permissions = [
['CAMERA', Permissions.CAMERA],
['AUDIO_RECORDING', Permissions.AUDIO_RECORDING],
['LOCATION', Permissions.LOCATION],
['USER_FACING_NOTIFICATIONS', Permissions.USER_FACING_NOTIFICATIONS],
['NOTIFICATIONS', Permissions.NOTIFICATIONS],
['CONTACTS', Permissions.CONTACTS],
['SYSTEM_BRIGHTNESS', Permissions.SYSTEM_BRIGHTNESS],
['CAMERA_ROLL', Permissions.CAMERA_ROLL],
['CALENDAR', Permissions.CALENDAR],
['REMINDERS', Permissions.REMINDERS],
]
export default function PermissionsExample() {
return (
{permissions.map(([permissionName, permissionType]) => (
onPress={() =>
this.invokePermissionsFunction(
...([
Permissions.CAMERA,
Permissions.AUDIO_RECORDING,
Permissions.LOCATION,
Permissions.USER_FACING_NOTIFICATIONS,
Permissions.NOTIFICATIONS,
Permissions.CONTACTS,
Permissions.SYSTEM_BRIGHTNESS,
Permissions.CAMERA_ROLL,
Permissions.CALENDAR,
Permissions.REMINDERS,
] as Permissions.PermissionType[])
)
}