在Android Q Beta上,位置对话框的行为发生了变化,以增加用户的隐私保护。以下是解决这个问题的示例代码:
private static final int REQUEST_LOCATION_PERMISSION = 1;
private void requestLocationPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
// 如果用户之前拒绝了权限请求,显示一个解释对话框
new AlertDialog.Builder(this)
.setTitle("Permission needed")
.setMessage("This app needs the Location permission to function properly.")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION);
}
})
.setNegativeButton("Cancel", null)
.create()
.show();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_LOCATION_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限已授予,执行你的位置相关操作
// 例如:启动位置服务
} else {
// 权限被拒绝,显示一个提示对话框
new AlertDialog.Builder(this)
.setTitle("Permission denied")
.setMessage("You have denied the Location permission. Some features of this app may not work properly.")
.setPositiveButton("Ok", null)
.create()
.show();
}
}
}
这样,当用户在Android Q Beta上运行你的应用程序时,将会显示一个权限请求对话框,并根据用户的响应执行相应的操作。