Android - 以编程方式打开或关闭 GPS
Android - turn GPS on or off programmatically
为什么我们需要为 on/off GPS 进行设置,另一方面我们可以 on/off WIFI 和蓝牙以编程方式进行设置,而无需移动到设置。
Android 指南在 4.0 版以上发生了变化。对于 4.0 以上的版本,您无法以编程方式关闭 GPS。
你的问题前提已经不正确了。使用 Google Play Services 7,您可以显示一个对话框以在您的应用程序中更改位置提供程序设置。跳转到 this video 中的 1:10。
曾经有一种方法可以通过发送 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 中被颠覆了。它仍然适用于旧的 OS 版本。
现在回答你的问题
Why we need to go setting for on/off GPS on the other hand we can
on/off WIFI and Bluetooth programmatically without move to settings ?
Android 的 GPS 技术会定期向 Google 发送位置数据,即使没有第三方应用程序实际使用 GPS 功能也是如此。 很多人对实时位置监控等事情非常敏感。这就是为什么Google强制要求在使用 GPS 功能之前征得用户的同意。每当用户打开 GPS 时都会看到以下对话框:
因此不再可能以编程方式 更改 GPS 设置,因为这需要用户的许可。程序员 可以 做的是通过调用
将用户引导至 GPS 设置
startActivity(context, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
让用户做出选择。
有趣的一点是,如果您尝试在新的 OS 版本上发送 GPS_ENABLED_CHANGE
广播,您会得到
java.lang.SecurityException: Permission Denial:
not allowed to send broadcast android.location.GPS_ENABLED_CHANGE
错误。如您所见,它是一个带有 权限拒绝 消息的 SecurityException
。
为什么我们需要为 on/off GPS 进行设置,另一方面我们可以 on/off WIFI 和蓝牙以编程方式进行设置,而无需移动到设置。 Android 指南在 4.0 版以上发生了变化。对于 4.0 以上的版本,您无法以编程方式关闭 GPS。
你的问题前提已经不正确了。使用 Google Play Services 7,您可以显示一个对话框以在您的应用程序中更改位置提供程序设置。跳转到 this video 中的 1:10。
曾经有一种方法可以通过发送 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 中被颠覆了。它仍然适用于旧的 OS 版本。
现在回答你的问题
Why we need to go setting for on/off GPS on the other hand we can on/off WIFI and Bluetooth programmatically without move to settings ?
Android 的 GPS 技术会定期向 Google 发送位置数据,即使没有第三方应用程序实际使用 GPS 功能也是如此。 很多人对实时位置监控等事情非常敏感。这就是为什么Google强制要求在使用 GPS 功能之前征得用户的同意。每当用户打开 GPS 时都会看到以下对话框:
因此不再可能以编程方式 更改 GPS 设置,因为这需要用户的许可。程序员 可以 做的是通过调用
将用户引导至 GPS 设置startActivity(context, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
让用户做出选择。
有趣的一点是,如果您尝试在新的 OS 版本上发送 GPS_ENABLED_CHANGE
广播,您会得到
java.lang.SecurityException: Permission Denial:
not allowed to send broadcast android.location.GPS_ENABLED_CHANGE
错误。如您所见,它是一个带有 权限拒绝 消息的 SecurityException
。