react-native-perms
Version:
React native package for permissions!
85 lines (76 loc) • 2.18 kB
JavaScript
import {
NativeModules,
NativeEventEmitter,
PermissionsAndroid,
Platform,
} from 'react-native';
const {
PermissionEventEmitter,
LocationPermissionManager,
NotificationPermissionManager,
} = NativeModules;
const AndroidNativeModule = NativeModules.ReactNativePerms;
export default class ReactNativePerms {
static emitter = new NativeEventEmitter(PermissionEventEmitter);
/**
* @description EVENTS_LIST = ["locationPermissionChange"]
* @param name One event of EVENTS_LIST
* @param callback
*/
addEventListener(name, callback) {
if (Platform.OS === 'ios') {
ReactNativePerms.emitter.addListener(name, callback);
} else {
console.warn('Events for permissions allow only on ios platform');
}
}
requestLocationPermission(type = 'inUse') {
if (Platform.OS === 'android') {
return PermissionsAndroid.request(ACCESS_FINE_LOCATION);
} else {
return LocationPermissionManager.requestAuthorization(type);
}
}
getNotificationPermission() {
if (Platform.OS === 'android') {
return new Promise((resolve, reject) =>
reject("Android didn't allow check notification permission")
);
} else {
return NotificationPermissionManager.getPermission();
}
}
requestNotificationPermission() {
if (Platform.OS === 'android') {
return new Promise((resolve, reject) =>
reject("Android didn't allow request notification permission")
);
} else {
return NotificationPermissionManager.requestAuthorization();
}
}
openSettings() {
if (Platform.OS === 'ios') {
LocationPermissionManager.openSettings();
} else {
AndroidNativeModule.openSettings();
}
}
getLocationPermission() {
if (Platform.OS === 'android') {
return new Promise(resolve =>
PermissionsAndroid.check(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION
).then(res => {
if (res) {
resolve('authorizedWhenInUse');
} else {
resolve('undetermined');
}
})
);
} else {
return LocationPermissionManager.getPermission();
}
}
}