问题描述
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
);
可能您不需要同时设置COARSE
和FINE
权限,但是我更希望它的风险较小,以防在其中一个Android版本中其使用方式有所不同。
设置中的权限ui:
- 只有
ACCESS_FINE_LOCATION
权限被转换为仅当用户打开应用程序用户界面时才授予对位置api的访问权限。 - 同时拥有
ACCESS_FINE_LOCATION
和ACCESS_BACKGROUND_LOCATION
会将其设置为已授予