2011-03-30 53 views
7

可能重复:
Enable GPS programatically like Tasker如何启用Android的GPS编码

好吧,我知道有问过同样的问题,但所有的答案是 “NO”。事实证明,启用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); 

谢谢。

回答

10

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

如果瞭望台可以远程启用GPS接收器,然后使用该服务,然后将其关闭 - 我们会的,但遗憾的是没有“比山等一切禁用GPS”,如果你禁用了GPS接收器,没有应用程序可以使用它。 启用GPS接收器需要用户手动完成。

编辑:它看起来像在山的新版本,他们最有可能利用现在一个安全漏洞,做到这一点。它不能保证继续工作,但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有关人们如何使用这种方法的更多讨论。

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

+0

是的,这是旧版本。但是在新版本中这是可能的。查看他们的帮助https://www.mylookout.com/help/ _您可以远程打开GPS吗?_ **是!** Lookout尽可能高效地使用Android手机的GPS接收器。当Android设备请求定位时,Lookout可以在定位运行时远程打开GPS,然后再次关闭GPS(定位可运行几分钟以获得最佳定位结果)。这有助于节省手机的电池寿命。当您明确要求时,Lookout仅使用GPS获取您的位置。 – Jason 2011-03-30 04:41:47

+0

我亲自测试过这个。有用。 – Jason 2011-03-30 04:43:17

+0

我刚刚试过它在一个扎根设备上,我可以确认它确实似乎可以启用GPS(即使完成后它仍然保持启用状态)。我想知道他们是否仍然能够在无根的设备上做到这一点。你有没有试过它的股票,没有根深蒂固的手机? – Brian 2011-03-30 04:58:21