Dan*_*son 5 android geolocation react-native
我react-native-geolocation-service用来获取用户的位置。在 iOS 上,当应用程序在前台时,很容易只请求位置访问,您只需跳过添加后台位置访问作为功能。但是,我不明白您如何在 Android 上删除此权限。我没有ACCESS_BACKGROUND_LOCATION权限设置,但我仍然在例如我的 Pixel 2 上获得“始终允许”选项。
这是我用来获取用户位置的代码:
const getCurrentPosition = async (onSuccess, onError) => {
if (Platform.OS === 'android') {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
title: 'My title',
message: 'My message',
buttonPositive: 'Continue',
}
);
if (granted !== PermissionsAndroid.RESULTS.GRANTED) {
onError();
return;
}
}
Geolocation.getCurrentPosition(
(result) => {
const position = {
longitude: result.coords.longitude,
latitude: result.coords.latitude,
};
onSuccess(position);
},
(error) => {
onError();
},
{ enableHighAccuracy: true, maximumAge: 10000, timeout: 15000 }
);
};
Run Code Online (Sandbox Code Playgroud)
查看您的主AndroidManifest.xml文件(主要我的意思是 under android/app/src/main(COULD_BE_SOMETHING_ELSE_USUALLY_MAIN_BUT_YMMV)/AndroidManifest.xml)
你需要找到一堆<uses-permission />. 检查这些坏男孩之一是否获得了 ACCESS_BACKGROUND_LOCATION:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
没运气?不要害怕,我亲爱的朋友。这里有一种补救措施,可帮助您因与 React Native 的头脑打交道而感到战斗疲劳。在最后一个<uses-permission>标签下添加这一行。
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"
tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)
愿和平盛行。
技术要点:
实际上,像react-native-geolocation-serviceor 之类的库react-native-background-geolocation可以改变 final AndroidManifest.xml,这将进入大量编辑的包。
简单地删除一行不会削减它,因为您无权访问该最终草稿,因为它是自动生成的。您需要提前一步并使用tools:node="remove"以确保它将从清单文件的最终版本中删除。
资料来源: