Android 7及以上非root非系统应用如何编程实现GPS禁用功能
普通应用禁用GPS开关可行性解答
核心结论
面向普通公域用户的第三方普通应用,没有合规的可行方案实现禁用系统GPS开关、阻止用户自主修改GPS状态的需求。
分系统细节说明
安卓平台
- 安卓系统从6.0版本开始对权限做了严格的层级划分,修改全局GPS开关需要
WRITE_SECURE_SETTINGS权限,该权限仅对系统预置应用、和系统签名一致的应用,或用户手动通过ADB命令授权的应用开放,普通应用无法在用户无感知的情况下获取该权限。 - 如果你做的是内部部署类应用,不需要上架公域应用商店,可以走ADB授权的受限方案:
- 引导管理员通过ADB执行命令给应用授权:
adb shell pm grant 你的应用包名 android.permission.WRITE_SECURE_SETTINGS- 应用拿到权限后可以直接修改全局GPS状态,同时注册广播监听用户的开关修改动作,检测到变更后自动改回预设值,变相实现用户无法自主调整的效果,核心代码示例:
// 修改GPS状态为关闭 Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF); // 注册GPS状态变化监听 IntentFilter filter = new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION); registerReceiver(gpsStateReceiver, filter); - 公域应用无法使用该方案:普通用户不会操作ADB授权,且主流应用商店都会拒绝申请该权限的普通应用上架。
iOS平台
iOS的系统权限管控比安卓更严格,没有任何公开API允许第三方普通应用修改全局定位开关,也无法屏蔽系统设置内的定位开关选项,完全没有实现该需求的可能。
替代方案参考
如果你的核心需求是防止其他应用获取真实定位,而非禁用GPS硬件,可以申请前台定位权限,持续发起模拟定位,给系统返回虚假的定位坐标,该方案不需要特殊权限,但无法阻止用户手动关闭GPS开关。
内容的提问来源于stack exchange,提问作者Krlos
相关产品推荐
相关产品推荐

