android - 删除 Android 上的后台位置访问权限
问题描述
我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 }
);
};
解决方案
查看您的主AndroidManifest.xml
文件(我的意思是在主文件下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"/>
没运气?不要害怕,我亲爱的朋友。这里有一个补救办法,可以解决你因与反应原生的交易而疲惫不堪的头脑。<uses-permission>
在最后一个标签下添加这一行。
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"
tools:node="remove" />
愿和平盛行。
技术细节:
实际上,像react-native-geolocation-service
or之类的库react-native-background-geolocation
可以更改 final AndroidManifest.xml
,这将转到经过大量编辑的捆绑包。
简单地删除一行不会删减它,因为您无权访问该最终草稿,因为它是自动生成的。您需要领先一步并使用tools:node="remove"
以确保它将从清单文件的最终版本中删除。
资料来源:
推荐阅读
- python - 用 JSON 中的字符串列表替换单词中的多个相等字符串
- python - 将变量和值传递给函数(通配符?)
- memory - Y86-64 ISA 中存储的条件标志在哪里?
- loops - 在这种情况下如何循环数组?
- angular - 查询参数更改后 canActivate 不触发
- javascript - Angular 组件之间的数据共享
- mysql - SQL for WP 删除具有多个元键和评论的用户
- java - 泽西 MessageBodyProviderNotFoundException
- java - 如何检测丢失的 MySQL 服务器但仍允许长时间运行的查询
- java - 尝试读取 txt 文件并将它们转换为具有不同原语的对象