3

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

但是,如果我重新启动该应用程序,它会启用该位置。关于我在哪里可以在第一次启动时启用位置的任何建议?代码的第一部分在 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);
4

3 回答 3

1

如果您在模拟器上进行测试,则只会在第一次运行时询问权限。如何调试 Android 6.0 权限?

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

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

于 2016-01-02T01:59:03.443 回答
0

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

要修复此更改:

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

至:

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

ActivityCompat.requestPermissions 用于活动。当你使用 Fragment 时,你应该直接调用 requestPermissions。

于 2016-02-27T17:57:00.767 回答
0

仔细看看这条线

permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION

权限是一个字符串数组,这意味着您应该使用 equals() 或 compareTo() 方法进行比较。

于 2016-02-13T11:19:31.583 回答