Android - 以编程方式打开或关闭 GPS
Posted
技术标签:
【中文标题】Android - 以编程方式打开或关闭 GPS【英文标题】:Android - turn GPS on or off programmatically 【发布时间】:2015-05-27 16:39:22 【问题描述】:为什么我们需要设置打开/关闭 GPS 另一方面,我们可以通过编程方式打开/关闭 WIFI 和蓝牙,而无需转到设置。 android 指南在 4.0 版以上已更改。对于 4.0 以上的版本,您无法以编程方式关闭 GPS。
【问题讨论】:
为什么 Google 将其更改为 GPS 而不是其他人 那叫安全@Arunkumar 继续问谷歌。如果你希望你可以从这里报告source.android.com/source/report-bugs.html Wifi或数据连接也可以调用安全,我们也可以从网络提供商处获取用户的位置。 网络提供商提供的位置永远不会准确。 【参考方案1】:曾经有一种方法可以通过发送android.location.GPS_ENABLED_CHANGE
广播以编程方式启用/禁用 GPS:
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", enabled);
sendBroadcast(intent);
其中enabled
将分别为true
或false
。
如果你看一下this bug report,这个 hack 在 Android 4.4 中被颠覆了。它仍然适用于较旧的操作系统版本。
现在回答你的问题
另一方面,为什么我们需要设置开启/关闭 GPS,我们可以 以编程方式打开/关闭 WIFI 和蓝牙,无需移至设置?
即使没有第三方应用实际使用 GPS 功能,Android 的 GPS 技术也会定期向 Google 发送位置数据。 很多人对实时位置监控之类的东西非常敏感。这就是为什么谷歌在使用 GPS 功能之前必须征得用户同意的原因。只要用户打开 GPS,就会看到以下对话框:
因此不再可能以编程方式更改 GPS 设置,因为它需要用户的许可。程序员可以做的是通过调用将用户引导至 GPS 设置
startActivity(context, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
并让用户做出选择。
有趣的是,如果您尝试在新的操作系统版本上发送GPS_ENABLED_CHANGE
广播,您会得到一个
java.lang.SecurityException: Permission Denial:
not allowed to send broadcast android.location.GPS_ENABLED_CHANGE
错误。如您所见,它是一个 SecurityException
,带有 permission denial 消息。
【讨论】:
【参考方案2】:您问题的前提不再正确。使用 Google Play Services 7,您可以显示一个对话框来从您的应用程序中更改位置提供程序设置。在this video 中跳转到 1:10。
【讨论】:
请注意,这仍然涉及到用户,尽管它比在设置应用程序中弹出位置屏幕更方便(并提供更好的用户体验)。它还引入了对 Play 服务的依赖,因此不适用于非 Google Play 生态系统设备(例如 Kindle Fire 系列、黑莓 10)。以上是关于Android - 以编程方式打开或关闭 GPS的主要内容,如果未能解决你的问题,请参考以下文章
在android上以编程方式打开/关闭大写锁定和shift键
如何在 android Pie 和 UP 中以编程方式打开/关闭扬声器