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

Posted

技术标签:

【中文标题】如何防止用户关闭 GPS、Wifi 和蓝牙?【英文标题】:How to prevent users from turning off GPS, Wifi and Bluetooth? 【发布时间】:2019-10-15 07:59:37 【问题描述】:

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

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

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

此限制在受管理的个人资料中无效。

用户限制键。

类型:布尔值

【问题讨论】:

你不能阻止他们关闭东西,你唯一能做的就是当你的应用程序加载时告诉用户你需要这些东西(以及为什么)并且在他们这样做之前不要让他们使用应用程序 你走错路了(不要强迫用户)。也许你需要改变你的策略。您可以在每种情况下观察 GPS 状态并采取适当的措施... 这是一个企业应用程序。因此,公司可能会使用 MDM 来部署应用程序和控制设备。如果是这样,他们可能可以避免禁用某些设置。 对于 GPS,您可以尝试以下链接中提到的解决方案 How can I enable or disable the GPS programmatically on Android? 【参考方案1】:

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

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

【讨论】:

哦,这对我来说真的是个问题。如果我有 root 访问权限,至少可以这样做吗? 是的,但我相信这并不容易。您要解决的用例是什么? 这是一个公司使用的应用程序,我需要防止用户绕过它。 设备所有者让您的应用在需要时控制关闭/打开。但我认为您不能阻止用户手动将其关闭。请尝试一下,让我们知道您的发现。【参考方案2】:

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

只是一个建议

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于如何防止用户关闭 GPS、Wifi 和蓝牙?的主要内容,如果未能解决你的问题,请参考以下文章

手机浏览器如何防止被检测到设备信息

检测用户是不是打开或关闭了 Wifi 或蓝牙 [关闭]

是否可以防止 iOS 和 Android 上的 GPS 作弊?

当蓝牙连接状态发生变化时,防止onDestroy

如何防止设备被重复控制

iphone控制中心关闭蓝牙和WiFi,为啥不能彻底关闭,还要到系统关闭?