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

Posted

技术标签:

【中文标题】如何使用 devicepolicymanager 为我的设备所有者应用程序在 android 10 中获取 android.permission.ACCESS_BACKGROUND_LOCATION?【英文标题】:How to get android.permission.ACCESS_BACKGROUND_LOCATION in android 10 for my device owner application using devicepolicymanager? 【发布时间】:2020-12-14 20:32:01 【问题描述】:
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 的代码,但我没有得到它。

【问题讨论】:

【参考方案1】:

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

    <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, packageName, 
    Manifest.permission.ACCESS_FINE_LOCATION,
    DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
);
mDevicePolicyManager.setPermissionGrantState(
    adminComponentName, packageName, 
    Manifest.permission.ACCESS_BACKGROUND_LOCATION,
    DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED
);

可能您不需要同时设置COARSEFINE 权限,但我希望它的风险较小,以防在其中一个 android 版本中以不同方式处理。

设置中的权限用户界面:

只有ACCESS_FINE_LOCATION 权限被转换为只有在用户打开应用程序 ui 时才授予对位置 api 的访问权限。 同时拥有ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION 将其设置为授予

【讨论】:

以上是关于如何使用 devicepolicymanager 为我的设备所有者应用程序在 android 10 中获取 android.permission.ACCESS_BACKGROUND_LOCATION?的主要内容,如果未能解决你的问题,请参考以下文章

Android : DevicePolicyManager

可以从非管理员应用程序调用 DevicePolicyManager.lockNow() 吗?

Android权限篇 设备策略管理器(DevicePolicyManager)

DevicePolicyManager.isDeviceOwnerApp 方法无法正常工作

关于android的设备管理器-DevicePolicyManager

如何以编程方式使用密码设置屏幕锁定?