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 将分别为truefalse

如果你看一下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 中以编程方式打开/关闭扬声器

在android中以编程方式关闭shift键

如何在Android 6.x上以编程方式启用或禁用GPS?

如何在 Android 中以编程方式启用禁用 GPS? [复制]

如何在Android上以编程方式启用或禁用GPS?