如何在Android编码中启用GPS

时间:2011-03-30 03:55:39

标签: android gps

  

可能重复:
  Enable GPS programatically like Tasker

好的,我知道之前有同样的问题,但所有答案都是“不”。事实证明,启用GPS可以在编码中完成。不信?尝试一个名为“LOOKOUT”的应用程序。我相信有一些解决方法可以达到这个目的。

我通过了解了AndroidManifest.xml,我发现他们只使用

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

任何人都知道他们是如何做到这一点的?隐藏的秘密是什么?我个人设法只在应用程序作为系统应用程序安装并且还需要两个权限时才能执行此操作

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

我的代码:

Settings.Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, true);
谢谢。

1 个答案:

答案 0 :(得分:9)

根据Lookout支持论坛上的this post,他们无法以编程方式启用GPS。

  

如果Lookout可以远程启用GPS接收器,那么使用该服务,然后关闭它 - 我们会,但遗憾的是没有“禁用除Lookout以外的所有其他GPS”,如果您已禁用GPS接收器,则没有应用程序可以利用它。 启用GPS接收器需要用户手动执行此操作。

编辑:看起来在新版本的Lookout中,他们现在很可能利用安全漏洞来实现这一目标。它不能保证继续工作,但according to an open Android bug report from April 2010,类似于以下代码将成功以编程方式启用/禁用GPS(至少在修复缺陷之前):

private void toggleGPS(boolean enable) {
    String provider = Settings.Secure.getString(getContentResolver(), 
        Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(provider.contains("gps") == enable) {
        return; // the GPS is already in the requested state
    }

    final Intent poke = new Intent();
    poke.setClassName("com.android.settings", 
        "com.android.settings.widget.SettingsAppWidgetProvider");
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
    poke.setData(Uri.parse("3"));
    context.sendBroadcast(poke);
}

另外,请参阅问题"Enable GPS programmatically like Tasker"XDA thread mentioned there,了解有关人们如何使用此方法的更多讨论。

如果你使用这种方法,你应该向你的应用程序的潜在用户说清楚,因为这是巨大的潜在的隐私问题。