Android-以编程方式打开或关闭GPS

Android-以编程方式打开或关闭GPS,android,android-intent,gps,google-play-services,android-location,Android,Android Intent,Gps,Google Play Services,Android Location,为什么我们需要设置开/关GPS另一方面,我们可以通过编程打开/关闭WIFI和蓝牙,而无需移动到设置。 安卓指南在4.0版以上有所改变。对于4.0以上的版本,您不能通过编程方式关闭GPS。问题的前提不再正确。使用Google Play Services 7,您可以在应用程序中显示一个对话框来更改位置提供商设置。跳转到1:10英寸。过去有一种方法可以通过发送android.location.GPS\u ENABLED\u更改广播以编程方式启用/禁用GPS: Intent intent = new I

为什么我们需要设置开/关GPS另一方面,我们可以通过编程打开/关闭WIFI和蓝牙,而无需移动到设置。
安卓指南在4.0版以上有所改变。对于4.0以上的版本,您不能通过编程方式关闭GPS。

问题的前提不再正确。使用Google Play Services 7,您可以在应用程序中显示一个对话框来更改位置提供商设置。跳转到1:10英寸。

过去有一种方法可以通过发送
android.location.GPS\u ENABLED\u更改
广播以编程方式启用/禁用GPS:

Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", enabled);
sendBroadcast(intent);
其中启用的
将分别为
true
false

如果你看一看,这个黑客在安卓4.4中被颠覆了。它仍然适用于较旧的操作系统版本

现在回答你的问题

为什么我们需要设置开/关GPS另一方面我们可以 通过编程方式打开/关闭WIFI和蓝牙,而不移动到设置

即使没有第三方应用程序真正使用GPS功能,Android的GPS技术也会定期向谷歌发送位置数据很多人对实时位置监控等问题非常敏感。这就是谷歌强制要求用户在使用GPS功能之前必须征得同意的原因。只要用户打开GPS,就会看到以下对话框:

因此,不再可能通过编程更改GPS设置,因为这需要用户的许可。程序员所能做的就是通过调用

startActivity(context, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
并让用户做出选择

有趣的是,如果您尝试在新的操作系统版本上发送
GPS\u-ENABLED\u-CHANGE
广播,您会得到一个

java.lang.SecurityException: Permission Denial: 
    not allowed to send broadcast android.location.GPS_ENABLED_CHANGE

错误。正如您所见,这是一个
安全例外
并带有一条权限拒绝消息。

为什么谷歌将此更改为GPS而不是其他在ask Google上调用security@Arunkumargo的人。如果您希望从这里报告,Wifi或数据连接也可以呼叫安全,我们还可以从网络提供商处获取用户的位置。网络提供商提供的位置永远不会准确。请注意,这仍然涉及用户,尽管它更方便(并提供更好的用户体验)然后在设置应用程序中弹出位置屏幕。它还引入了对Play服务的依赖,因此在非Google Play生态系统设备(如Kindle Fire series、BlackBerry 10)上不可用。