更新2
我理解SelfCheckPermission可能有帮助或真正的答案,但问题是我无法找到合适的关键字。
如果是相机,我只需要这个代码
if(CheckSelfPermission(Manifest.Permission.Camera)
== Permission.Granted)
如果是读取联系人等其他内容,我可以使用此代码。
if(CheckSelfPermission(Manifest.Permission.ReadContacts)
== Permission.Granted)
但我无法使用AccessCoarseLocation和AccessFineLocation在应用程序设置中启用位置,因为即使我在应用程序的应用程序设置中禁用了位置,它们仍然都是正确的。也许我只需要一个正确的关键字,以及我需要你帮助的地方。
更新1
位置服务不是我在这里的意思。位置服务,粗略和精细位置权限可以启用或禁用,与应用程序设置上的位置应用程序权限无关。我需要的是从设置中检查应用程序设置 - > apps / applition - >你的应用 - >如果位置被禁用,则位置。示例应用程序是此Waze已禁用位置
原始帖子
我搜索的所有内容都是自行检查粗略和精细位置的权限,但它并不能解决我的问题,因为即使禁用了应用程序设置的位置,它也始终被授予。我需要检测是否允许应用程序设置的位置。
我现在所拥有的是重定向到应用设置以允许所需的权限。 TIA。
答案 0 :(得分:1)
使用Android.Support.V4.App
,您可以请求权限(Manifest.Permission.LocationHardware
)并查看OnRequestPermissionsResult
中的结果,以确定用户是否已手动禁用权限(或在系统对话框出现时拒绝权限) )。
1)实施ActivityCompat.IOnRequestPermissionsResultCallback
public override void OnRequestPermissionsResult (int requestCode, string[] permissions, Permission[] grantResults)
{
if (requestCode == REQUEST_LOCATION) {
Log.Info (TAG, "Received response for location permissions request.");
if (!PermissionUtil.VerifyPermissions (grantResults)) {
Log.Info (TAG, "Location permissions are NOT granted.");
Snackbar.Make (layout, Resource.String.permissions_not_granted, Snackbar.LengthShort).Show ();
}
}
}
2)在RequestPermissions
上执行Manifest.Permission.LocationHardware
:
ActivityCompat.RequestPermissions (this, new string[] {Manifest.Permission.LocationHardware}, REQUEST_LOCATION);
VerifyPermissions
助手方法:
public static bool VerifyPermissions (Permission[] grantResults)
{
// At least one result must be checked.
if (grantResults.Length < 1)
return false;
// Verify that each required permission has been granted, otherwise return false.
foreach (Permission result in grantResults) {
if (result != Permission.Granted) {
return false;
}
}
return true;
}
答案 1 :(得分:0)
我希望这种方法能够正常运作:
protected boolean isLocationPermissionEnabled() {
return (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED);
}
答案 2 :(得分:-1)
您可以使用以下代码检查是否启用了gps提供商和网络提供商。
LocationManager lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean gps_enabled = false;
boolean network_enabled = false;
try {
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception ex) {}
try {
network_enabled =
lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}
if(!gps_enabled && !network_enabled) {
// notify user
AlertDialog.Builder dialog = new AlertDialog.Builder(context);
dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled));
dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
// TODO Auto-generated method stub
Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS);
context.startActivity(myIntent);
//get gps
}
});
dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface paramDialogInterface, int paramInt) {
// TODO Auto-generated method stub
}
});
dialog.show();
}