2012-07-05 69 views
3

我們已經爲Android實施了基於地理位置的應用,因此我們需要確保GPS始終處於啓用狀態。問題是,用於GPS的IsProviderEnabled不起作用

manager.isProviderEnabled(LocationManager.GPS_PROVIDER) 

總是返回即使GPS提供商啓用假的,所以我們的應用程序總是顯示警報改變GPS狀態,或者無法正常工作。

你知道發生了什麼?

我們正在測試它與三星Galaxy S和HTC Wildfire設備... 在此先感謝。

回答

3

您可以直接從系統中獲取GPS狀態:

LocationManager myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

private boolean getGPSStatus() 
{ 
    String allowedLocationProviders = 
    Settings.System.getString(getContentResolver(), 
    Settings.System.LOCATION_PROVIDERS_ALLOWED); 

    if (allowedLocationProviders == null) { 
     allowedLocationProviders = ""; 
    } 

    return allowedLocationProviders.contains(LocationManager.GPS_PROVIDER); 
} 
+0

'LOCATION_PROVIDERS_ALLOWED'自API 19以來已棄用。文檔是使用'LOCATION_MODE'和'MODE_CHANGED_ACTION'(或'PROVIDERS_CHANGED_ACTION') – Sunshinator 2017-02-10 16:07:48

0

你需要首先檢查是否GPS確實存在您的手機上。 如果您的手機是便宜的手機,最有可能它使用網絡位置作爲位置提供商。

你可以試試這個:

private boolean isGPSEnabled() { 
Context context = Session.getInstance().getCurrentPresenter().getViewContext(); 

LocationManager locationMgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

boolean GPS_Sts = locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)|| locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER); 

return GPS_Sts; 
} 
0

有時候你的設備設置設置爲獲取使用Wi-Fi網絡沒有GPS系統的位置,所以該位置將被打開,但在檢查時,您的應用程序將返回false GPS_PROVIDER

到正確的解決方案是同時檢查,GPS &網:

,如果你想使用Settings檢查:

private boolean checkIfLocationOpened() { 
    String provider = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if (provider.contains("gps") || provider.contains("network")) 
     return true; 
    } 
    // otherwise return false 
    return false; 
} 

,如果你想使用LocationManager它做的事:

private boolean checkIfLocationOpened() { 
    final LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){ 
     return true; 
    } 
    // otherwise return false 
    return false; 
} 

您可以在my answer here找到完整的詳細信息。