Skip to content

Instantly share code, notes, and snippets.

@ivanstnsk
Created May 27, 2020 12:55
Show Gist options
  • Select an option

  • Save ivanstnsk/4ff5bd5f1fd3c7294ebe5c365fdf48a4 to your computer and use it in GitHub Desktop.

Select an option

Save ivanstnsk/4ff5bd5f1fd3c7294ebe5c365fdf48a4 to your computer and use it in GitHub Desktop.
use Android Permissions hook React Native in Typescript
import { useEffect, useState } from 'react';
import { PermissionsAndroid } from 'react-native';
type THook = [boolean, boolean];
interface PermissionsAndroidResponse {
[key: string]: string;
}
const PERMISSIONS_REQUEST = [
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
];
const isAllGranted = (res: PermissionsAndroidResponse) => {
return PERMISSIONS_REQUEST.every((permission) => {
return res[permission] === PermissionsAndroid.RESULTS.GRANTED;
});
}
export const useAndroidPermissions = (): THook => {
const [granted, setGranted] = useState(false);
const [waiting, setWaiting] = useState(true);
const doRequest = async () => {
let granted = false;
try {
const res = await PermissionsAndroid.requestMultiple(PERMISSIONS_REQUEST);
granted = isAllGranted(res);
} catch (err) {
console.warn(err);
}
setWaiting(false);
setGranted(granted);
}
useEffect(() => {
doRequest();
}, []);
return [waiting, granted];
};
// Example of usage
// const [waitingPerm, grantedPerm] = useAndroidPermissions();
@cjoshmartin
Copy link
Copy Markdown

Your work is valuable! Thanks for posting this online!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment