如何使用devicepolicymanager为我的设备所有者应用程序在android 10中获取android.permission.ACCESS_BACKGROUND_LOCATION?

问题描述

String packageName = context.getPackageName();

ComponentName adminComponentName = getComponentName(context);

boolean success = mDevicePolicyManager.setPermissionGrantState(
    adminComponentName,packageName,Manifest.permission.ACCESS_BACKGROUND_LOCATION,DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
);

这是我用于授予ACCESS_BACKGROUND_LOCATION的代码,但我没有得到它。

解决方法

只需确保您已请求并授予了所有与位置相关的权限:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
mDevicePolicyManager.setPermissionGrantState(
    adminComponentName,packageName,Manifest.permission.ACCESS_COARSE_LOCATION,DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
);
mDevicePolicyManager.setPermissionGrantState(
    adminComponentName,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_BACKGROUND_LOCATION,DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
);

可能您不需要同时设置COARSEFINE权限,但是我更希望它的风险较小,以防在其中一个Android版本中其使用方式有所不同。

设置中的权限ui:

  • 只有ACCESS_FINE_LOCATION权限被转换为仅当用户打开应用程序用户界面时才授予对位置api的访问权限。
  • 同时拥有ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION会将其设置为已授予