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

Aru*_*mar -1 gps android android-intent android-location google-play-services

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

Y.S*_*Y.S 5

曾经有一种通过发送android.location.GPS_ENABLED_CHANGE广播以编程方式启用/禁用GPS的方法:

Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", enabled);
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

enabled将在何处true或将false分别.

如果你看看这个错误报告,这个黑客在Android 4.4中被颠覆了.它仍适用于较旧的OS版本.

现在回答你的问题

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

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

GPS用户权限

因此,不再可能以编程方式更改GPS设置,因为它必须得到用户的许可.程序员可以做的是通过呼叫将用户引导至GPS设置

startActivity(context, new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
Run Code Online (Sandbox Code Playgroud)

并让用户做出选择.

有趣的是,如果你尝试GPS_ENABLED_CHANGE在新的操作系统版本上发送广播,你会得到一个

java.lang.SecurityException: Permission Denial: 
    not allowed to send broadcast android.location.GPS_ENABLED_CHANGE
Run Code Online (Sandbox Code Playgroud)

错误.正如您所看到的,它SecurityException具有权限拒绝消息.