7

我正在开发一个跟踪应用程序,我需要防止用户关闭用于确定位置的基本传感器。我无法修改设备 ROM 或拥有 root 访问权限(或者至少最好没有),但我想到使用设备管理 API 通过 Profile Owner 或 Device Owner 模式执行这些功能。我基本上是在寻找一种在 Android 设置中阻止这些功能的方法。

我不确定这是否可能以及如何做到这一点,我没有在 GitHub 中找到已实现此功能的应用程序的示例。谁能给我一个灯,一些例子或具体的文件?

我尝试遵循这三个文档,但没有成功找到此特定功能的解决方案:

https://source.android.com/devices/tech/admin https://developer.android.com/guide/topics/admin/device-admin https://developers.google.com/android/management/introduction

这是我一直在尝试的摘录:

setUserRestriction(UserManager.DISALLOW_CONFIG_WIFI, true);
setUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, active);
setUserRestriction(UserManager.DISALLOW_CONFIG_BLUETOOTH, active);

private void setUserRestriction(String restriction, boolean disallow){
    if (disallow) {
        mDevicePolicyManager.addUserRestriction(mAdminComponentName, restriction);
    } else {
        mDevicePolicyManager.clearUserRestriction(mAdminComponentName,
restriction);
    }
}

DISALLOW_CONFIG_BLUETOOTH 在 API 级别 18 中添加 public static final String DISALLOW_CONFIG_BLUETOOTH

指定是否不允许用户配置蓝牙。这并不限制用户打开或关闭蓝牙。默认值为假。

此限制不会阻止用户使用蓝牙。要完全禁止在设备上使用蓝牙,请使用 DISALLOW_BLUETOOTH。

此限制在托管配置文件中无效。

用户限制的关键。

类型:布尔值

4

4 回答 4

6

您无法阻止他们关闭 GPS、WIFI 和蓝牙。你可以做的是有一个如下的实现或使用这个库。

https://github.com/KI-labs/gps-permission-checks-livedata

于 2019-05-29T16:55:34.933 回答
3

你不能,显然是出于安全原因。如果你想达到类似的效果,你可能需要修改设备 ROM。您应该创建一个 BroadcastReceiver 并继续跟踪 Internet 和蓝牙连接的变化,而不是当用户断开它们暂停服务、显示对话框、完成应用程序或您需要做的任何事情时,您可以正确处理它。
如果一个应用程序可以对用户设置进行一些控制,那就太奇怪了,想象一下,如果你安装了一个应用程序,然后突然你不能再禁用 wi-fi,直到你卸载它。你不能这样做是有充分理由的

于 2019-06-06T14:52:33.237 回答
1

防止蓝牙/wifi 断开连接也将阻止使用飞行器模式,这是一个限制在 ROM 中且不可覆盖的安全问题。如上所述,您的选项是监控 wifi/蓝牙/gps 停用并提示用户警报。顺便说一句,GPS 不受飞行器模式的影响,因为它是一个纯接收器,不会进行主动传输。在这种情况下,GPS 将始终处于活动状态并收集信息(如果处于活动状态且手机未处于省电模式,也就是依赖 wifi 位置)。我建议您检查用户是否激活了飞行模式,以减少您的警报烦人(空中模式在相同情况下是强制性的,并且应该被您的应用程序视为“合法”,并且可能不如用户自愿断开连接那么重要

于 2019-06-07T10:06:06.467 回答
0

简而言之,您不能,但您可以在启用/连接 wifi 时收听,并且您可以提示一个对话框说明原因。
通过这种方式,它可以让用户更简洁地掌握需要做什么。

只是一个建议

于 2019-06-05T09:23:57.530 回答