Java 请求位置的运行时权限时

Java 请求位置的运行时权限时,java,android,google-maps-android-api-2,android-permissions,runtime-permissions,Java,Android,Google Maps Android Api 2,Android Permissions,Runtime Permissions,当前,当第一次启动我的应用程序时请求运行时权限时,它会提示用户使用他们的位置。如果单击“是”,则不会像应该的那样启用位置 但如果我重新启动该应用程序,它将启用该位置。关于在哪里可以让它在第一次发布时启用位置,有什么建议吗?代码的第一部分在OnCreate中调用 if (ContextCompat.checkSelfPermission(MapsActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)

当前,当第一次启动我的应用程序时请求运行时权限时,它会提示用户使用他们的位置。如果单击“是”,则不会像应该的那样启用位置

但如果我重新启动该应用程序,它将启用该位置。关于在哪里可以让它在第一次发布时启用位置,有什么建议吗?代码的第一部分在OnCreate中调用

    if (ContextCompat.checkSelfPermission(MapsActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(MapsActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION)) {

            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions(MapsActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    REQUEST_CODE_ASK_PERMISSIONS);

        }
    }

  @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_CODE_ASK_PERMISSIONS) {
        if (permissions.length == 1 &&
                permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION &&
                grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                mMap.setMyLocationEnabled(true);
            } else {
                // Show rationale and request permission.
            }
            mMap.setMyLocationEnabled(true);
        } else {
            //permission denied
        }
    }
}

  public void onMapReady(GoogleMap googleMap) {

    int permissionCheck = ContextCompat.checkSelfPermission(MapsActivity.this,
            Manifest.permission.ACCESS_FINE_LOCATION);

如果您在模拟器上进行测试,则仅在第一次运行时才会请求权限

此外,如果您没有完全卸载应用程序,并且正在从较低的SDK升级应用程序,或者用户在运行时设置了权限并将其设置为默认权限,则不会再次询问运行时权限


尝试完全卸载应用程序,或检查默认设置并清除它们。

仔细查看这一行

permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION
权限是一个字符串数组,意味着您应该使用equals()进行比较
或者compareTo()方法。

如果此代码位于片段中,则不会调用OnRequestPermissionResult()。因此,在重新打开应用程序之前,不会调用setMyLocationEnabled

要修复此更改,请执行以下操作:

ActivityCompat.requestPermissions(MapsActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_CODE_ASK_PERMISSIONS);
致:


ActivityCompat.requestPermissions用于活动。使用片段时,应直接调用requestPermissions

请张贴您的密码also@SahilGarg这样好吗?尝试再添加一个权限,即ACCESS\u Gross\u location您所说的“不应该启用位置”是什么意思?你在期待什么?实际发生了什么?@LarrySchiefer我想在用户第一次启动我的应用时执行mMap.setMyLocationEnabled(true)。因此,当前正在发生的是,当我清除应用程序上的所有数据并启动它时,它会打开一个地图视图,并显示一个蓝点作为我的位置。它打开并请求许可,我按allow。然后它不会启用我的位置,但如果我关闭应用程序并再次打开它,它会启用。
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_CODE_ASK_PERMISSIONS);