我們已經爲Android實施了基於地理位置的應用,因此我們需要確保GPS始終處於啓用狀態。問題是,用於GPS的IsProviderEnabled不起作用
manager.isProviderEnabled(LocationManager.GPS_PROVIDER)
總是返回即使GPS提供商啓用假的,所以我們的應用程序總是顯示警報改變GPS狀態,或者無法正常工作。
你知道發生了什麼?
我們正在測試它與三星Galaxy S和HTC Wildfire設備... 在此先感謝。
我們已經爲Android實施了基於地理位置的應用,因此我們需要確保GPS始終處於啓用狀態。問題是,用於GPS的IsProviderEnabled不起作用
manager.isProviderEnabled(LocationManager.GPS_PROVIDER)
總是返回即使GPS提供商啓用假的,所以我們的應用程序總是顯示警報改變GPS狀態,或者無法正常工作。
你知道發生了什麼?
我們正在測試它與三星Galaxy S和HTC Wildfire設備... 在此先感謝。
您可以直接從系統中獲取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);
}
你需要首先檢查是否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;
}
有時候你的設備設置設置爲獲取使用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找到完整的詳細信息。
'LOCATION_PROVIDERS_ALLOWED'自API 19以來已棄用。文檔是使用'LOCATION_MODE'和'MODE_CHANGED_ACTION'(或'PROVIDERS_CHANGED_ACTION') – Sunshinator 2017-02-10 16:07:48