我正在开发一个跟踪应用程序,我需要防止用户关闭用于确定位置的基本传感器。我无法修改设备 ROM 或具有 root 访问权限(或者至少没有非常可取),但我想使用设备管理 API 通过配置文件所有者或设备所有者模式执行这些功能。我基本上正在寻找一种在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 中添加 公共静态最终字符串DISALLOW_CONFIG_BLUETOOTH
指定是否禁止用户配置蓝牙。这不会限制用户打开或关闭蓝牙。默认值为 false。
此限制不会阻止用户使用蓝牙。要完全禁止在设备上使用蓝牙,请使用DISALLOW_BLUETOOTH。
此限制在托管配置文件中不起作用。
用户限制的键。
类型:布尔值
您无法阻止他们关闭GPS,WIFI和蓝牙。您可以做的是拥有如下所示的实现或使用此库。
https://github.com/KI-labs/gps-permission-checks-livedata
显然出于安全原因,您不能这样做。如果你想实现这样的东西,你可能需要修改设备ROM。您应该创建一个 BroadcastReceiver 并继续跟踪 Internet 和蓝牙连接更改,而不是当用户断开它们以暂停服务、显示对话框、完成应用程序或您需要执行的任何操作时,您可以正确处理它。
如果一个应用程序可以对用户设置进行一些控制,那将是很奇怪的,想象一下,如果您安装一个应用程序, 然后突然间,您无法再禁用Wi-Fi,直到您取消它。你不能这样做是有充分理由的
防止蓝牙/wifi断开连接也会阻止使用飞行器模式,这是一个受ROM限制且不可覆盖的安全问题。 如上所述,您的选择是监控 wifi/蓝牙/GPS 停用并提示用户发出警报。 顺便说一下,GPS不受飞机模式的影响,因为它是一个纯粹的接收器,不会进行主动传输。在这种情况下,GPS将始终处于活动状态并收集信息(如果处于活动状态并且手机未处于省电模式,即依赖wifi位置)。我建议您检查用户是否激活了飞机模式,以减少警报的烦恼(空中模式在相同情况下是强制性的,并且应该被您的应用程序视为"合法",并且可能不如用户自愿断开连接那么重要
简单来说,你不能,但你可以在启用/连接wifi时收听,你可以提示一个对话框说明原因。
通过这种方式,它使用户能够更简洁地掌握需要完成的工作。
只是一个建议