如何防止用户关闭GPS、Wifi和蓝牙?

How to prevent users from turning off GPS, Wifi and Bluetooth?

我正在开发一个跟踪应用程序,我需要防止用户关闭用于确定位置的基本传感器。我无法修改设备 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 Added in API level 18 public static final String DISALLOW_CONFIG_BLUETOOTH

Specifies if a user is disallowed from configuring bluetooth. This does not restrict the user from turning bluetooth on or off. The default value is false.

This restriction doesn't prevent the user from using bluetooth. For disallowing usage of bluetooth completely on the device, use DISALLOW_BLUETOOTH.

This restriction has no effect in a managed profile.

Key for user restrictions.

Type: Boolean

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

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

简单来说,你不能,但是你可以在 wifi enabled/connected 时收听,并且你可以提示一个对话框说明原因。
通过这种方式,它可以让用户更简洁地了解需要做什么。

Just a suggestion

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

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