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 => {
renderSinglePermissionsButtons() {
const permissions: Array<[string, Permissions.PermissionType]> = [
['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],
];
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,
]
)
}
import * as Permissions from 'expo-permissions'
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]) => (
checkPermissionAsync = async () => {
const permission = await getPermissionAsync(Permissions.CONTACTS);
this.setState({ permission });
}
export async function getContacts() {
const { status } = await Permissions.askAsync(Permissions.CONTACTS);
if (status !== "granted") {
return [];
}
const { data } = await Contacts.getContactsAsync({
fields: [Contacts.Fields.Name, Contacts.Fields.PhoneNumbers]
});
if (!data.length) {
return [];
}
const contacts = data
.reduce((contacts, item) => {
const hasUSNumber =
item.phoneNumbers &&
checkPermissionAsync = async () => {
const { status } = await Permissions.askAsync(Permissions.CONTACTS);
this.setState({ permission: status === 'granted' });
}