checkSelfPermission始终在Android

时间:2017-12-13 10:19:38

标签: android

我有一个应用程序来获取具有权限的用户位置。我的目标API = 25 btw

一旦我获得许可,它就不再要求我获得请求许可了。

我已经通过调试检查了我的hasCoarseLocationPermissionhasFineLocationPermission在获得许可后始终返回0(已授予)。

但是如果我再次清除请求权限的应用程序数据(返回-1)。但是我总是想在打开应用程序时请求权限(必须返回-1而不是0)。我该怎么办?

提前致谢。

int hasCoarseLocationPermission=ContextCompat.checkSelfPermission(Kirala3.this, Manifest.permission.ACCESS_COARSE_LOCATION);
int hasFineLocationPermission = ContextCompat.checkSelfPermission(Kirala3.this, Manifest.permission.ACCESS_FINE_LOCATION);

我也尝试过使用PermissionChecker函数,但它返回相同的值(0)。

3 个答案:

答案 0 :(得分:1)

尝试使用ActivityCompat

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }

答案 1 :(得分:0)

使用此功能检查位置许可

    public boolean isLocationPermissionEnabled() {

        return !(Build.VERSION.SDK_INT >= 23 &&
                ContextCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED);
    }

答案 2 :(得分:0)

要求用户获取权限不是应用程序应该在每次启动时执行的操作。应用程序获得权限后,即具有权限,直到用户撤消该权限。你所描述的内容听起来是正确的:

  1. 首先启动应用调用checkSelfPermission并返回PERMISSION_DENIED
  2. 应用程序请求权限并由用户授予
  3. 应用程序的后续启动仍然会调用checkSelfPermission(这正是应该执行的操作。)现在返回的值为PERMISSION_GRANTED。这是预料之中的。不需要用户提出新的权限请求。
  4. 手动重置应用数据并撤消“设置”应用中的权限
  5. 再次启动应用,checkSelfPermission返回PERMISSION_DENIED,应用必须再次请求用户许可。
  6. 您可能会发现此演讲很有帮助:https://youtu.be/WGz-alwVh8A

    您可能还会发现此权限帮助程序库非常有用:https://github.com/hiqes/andele