2015-05-26 175 views
1

如果我们使用此代码,我们会看到一条消息:正在搜索GPS。然而,仅示出了符号; GPS不实际工作:如何在我的android应用程序中以编程方式打开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

在kitkat os版本之后,您无法以语法方式启用和禁用gps。 –

+0

请帮我看看有没有什么根访问是为了获得Gps活动以编程方式启用或禁用它不工作在4.1.2 –

+0

@ user3578377:你见过我的答案? –

回答

1

这是不允许的。如果你看看this bug report,这个破解在Android 4.4中被颠覆了。它仍然适用于较旧的操作系统版本,尽管现在不应该在任何地方使用它。引述该报告:

这不工作...但是,它可能会导致东西作出反应,如果GPS状态改变 - 例如HTC个S将显示在GPS图标状态栏,即使GPS仍然被禁用。

这就解释了为什么你可以看到GPS图标,即使它不是实际开启。现在作为你为什么不能做...

Android的GPS技术,即使在没有第三方应用程序实际上使用GPS功能周期性地发送位置数据到谷歌。 在许多西方国家,这被视为对隐私的重大侵犯。这就是Google在使用GPS功能之前强制要求用户同意的原因。

GPS user permission

,因此它是不再可能编程改变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权限拒绝消息。

+0

实际上,它在4.4 IIRC之前是固定的。使用Play Services融合位置API的开发人员还可以选择让Play服务弹出一个对话框,要求通过“SettingsApi”启用位置跟踪的权限。 – CommonsWare

+0

确实。我的坏...:\ –

+0

@CommonsWare:如果你看看我的[问题](http://stackoverflow.com/q/30473371/3287204)...... :) –

相关问题