2011-03-30 54 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