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

时间:2015-03-24 11:28:18

标签: android android-intent gps google-play-services android-location

为什么我们需要设置开启/关闭GPS,另一方面我们可以通过编程方式打开/关闭WIFI和蓝牙而无需移动到设置。 Android指南已更改为4.0以上版本。对于4.0以上的版本,您无法以编程方式更改GPS。

2 个答案:

答案 0 :(得分:5)

曾经有一种通过发送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,这个黑客在Android 4.4中被颠覆了。它仍适用于较旧的OS版本。

现在回答你的问题

  

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

即使没有第三方应用实际使用GPS功能,Android的GPS技术也会定期向Google发送位置数据。 许多人对实时位置监控等事情非常敏感。这就是为什么Google在使用GPS功能之前必须获得用户的同意。每当用户打开GPS时,都会看到以下对话框:

GPS user permission

因此不再可能以编程方式更改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带有权限拒绝消息。

答案 1 :(得分:4)

你的问题的前提不再正确。使用Google Play Services 7,您可以显示一个对话框,以便在您的应用中更改位置提供商设置。跳至this video中的1:10。