Java 请求位置的运行时权限时
当前,当第一次启动我的应用程序时请求运行时权限时,它会提示用户使用他们的位置。如果单击“是”,则不会像应该的那样启用位置 但如果我重新启动该应用程序,它将启用该位置。关于在哪里可以让它在第一次发布时启用位置,有什么建议吗?代码的第一部分在OnCreate中调用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)
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);