首页 > 解决方案 > 删除 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 }
  );
};

标签: androidreact-nativegeolocation

解决方案


查看您的主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-serviceor之类的库react-native-background-geolocation可以更改 final AndroidManifest.xml,这将转到经过大量编辑的捆绑包。

简单地删除一行不会删减它,因为您无权访问该最终草稿,因为它是自动生成的。您需要领先一步并使用tools:node="remove"以确保它将从清单文件的最终版本中删除。

资料来源:


推荐阅读