### Complete Initialization and Permission Checking Source: https://github.com/zoontek/react-native-permissions/blob/master/_autodocs/api-reference/usage-patterns.md This example shows how to initialize and check all required permissions when your application starts. It handles platform-specific permissions for iOS and Android and provides a UI to request permissions if they are not granted. ```typescript import React, {useEffect, useState} from 'react'; import {View, Text, Button, Platform, Alert} from 'react-native'; import { check, request, PERMISSIONS, RESULTS, openSettings, } from 'react-native-permissions'; interface PermissionStatus { camera: boolean; microphone: boolean; contacts: boolean; } export const PermissionInitializer = () => { const [permissions, setPermissions] = useState({ camera: false, microphone: false, contacts: false, }); const [loading, setLoading] = useState(true); useEffect(() => { checkPermissions(); }, []); const checkPermissions = async () => { try { const perms = Platform.select({ ios: { camera: PERMISSIONS.IOS.CAMERA, microphone: PERMISSIONS.IOS.MICROPHONE, contacts: PERMISSIONS.IOS.CONTACTS, }, android: { camera: PERMISSIONS.ANDROID.CAMERA, microphone: PERMISSIONS.ANDROID.RECORD_AUDIO, contacts: PERMISSIONS.ANDROID.READ_CONTACTS, }, }); if (!perms) return; const [cameraStatus, micStatus, contactsStatus] = await Promise.all([ check(perms.camera), check(perms.microphone), check(perms.contacts), ]); setPermissions({ camera: cameraStatus === RESULTS.GRANTED, microphone: micStatus === RESULTS.GRANTED, contacts: contactsStatus === RESULTS.GRANTED, }); } finally { setLoading(false); } }; const requestPermission = async ( permission: string, key: keyof PermissionStatus ) => { try { const status = await request(permission); if (status === RESULTS.GRANTED) { setPermissions((prev) => ({...prev, [key]: true})); } else if (status === RESULTS.BLOCKED) { Alert.alert( 'Permission Blocked', 'This permission is blocked. Please enable it in settings.', [{text: 'OK'}, {text: 'Open Settings', onPress: openSettings}] ); } } catch (error) { console.error('Permission request failed:', error); } }; if (loading) { return Loading...; } return (