问题描述
我正在为我的 Android React Native 应用程序请求位置许可。我正在使用 npm 包:react-native-permissions
。我创建了一个自定义挂钩来执行此操作。
我的 iOS 实现完美无缺。在 Android 上尝试类似方法时,询问用户位置权限的对话框永远不会弹出。在我对权限的初始检查时,我的应用程序报告权限已被授予!!但是如何?
我将其包含在我的 AndroidManifest.xml 中:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
这是我请求许可的钩子:
export default (setPermissionsGranted = () => {},setPermissionError = () => {}) => {
const appState = useRef(AppState.currentState)
const [shouldCheckPermission,setShoudCheckPermission] = useState(false)
useEffect(() => {
let isMounted = true
const handleAppState = (nextAppState) => {
if (appState.current.match(/inactive|background/) && nextAppState === 'active') {
// the app has come into the foreground. Change a boolean state variable to trigger
// handlePermission() again.
if (isMounted) setShoudCheckPermission(!shouldCheckPermission)
}
appState.current = nextAppState
}
const handlePermissionStatus = (result) => {
const status = {
unavailable: () => {},denied: async () => {
const res = await request(PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION)
if (isMounted) {
if (res === RESULTS.GRANTED) {
setPermissionsGranted(true)
} else {
setPermissionsGranted(false)
}
}
},limited: () => {
// todo find out what limited entails
if (isMounted) setPermissionsGranted(true)
},granted: async () => {
if (isMounted) setPermissionsGranted(true)
},blocked: () => {
if (isMounted) setPermissionsGranted(false)
},}
return status[result]
}
AppState.addEventListener('change',handleAppState)
const handlePermission = async () => {
console.log('permissions code is run')
try {
const res = await check(PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION)
console.log('res',res)
handlePermissionStatus(res)()
} catch (err) {
throw err
}
}
handlePermission().catch((e) => {
if (isMounted) setPermissionError(e.message)
})
return () => {
AppState.removeEventListener('change',handleAppState)
isMounted = false
}
},[shouldCheckPermission])
}
另一个特殊之处,我已经注释掉了所有在 Android 上请求位置权限的代码,重新启动了 Metro 服务器,卸载了应用程序,然后重新安装了它。 request-permissions 标记仍在 AndroidManifest.xml 中。显然这就是我需要做的所有事情,现在权限是自动授予的!
我的理解是,这是一个危险的权限,不应自动授予,但 Android 将其视为安全权限。 ??♂️
提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)