如果我们使用此代码,我们会看到一条消息:搜索GPS 。但是,仅显示 GPS 符号; GPS 实际上无法正常工作:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
intent.putExtra("enabled", true);
this.sendBroadcast(intent);
}
为什么不工作?以及如何使其正常工作?
答案 0 :(得分:1)
这是不允许的。如果你看看this bug report,这个黑客在Android 4.4中被颠覆了。它仍适用于较旧的OS版本,但您现在不应该在任何地方使用它。引用该报告:
这不起作用......但是,它可能会导致物品反应,就像GPS状态改变一样 - 例如, HTC One S 会在状态栏中显示GPS图标,即使GPS仍然被禁用。
这解释了为什么你可以看到GPS图标,即使它实际上没有开启。至于为什么你 不能 这样做......
即使没有第三方应用实际使用GPS功能,Android的GPS技术也会定期向Google发送位置数据。 在许多西方国家,这被视为对隐私的重大侵犯。这就是为什么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
带有权限拒绝消息。