Службы определения местоположения Google getBestProvider приводят к сбою приложения, даже если все службы определения местоположения отключены или могут быть изменены с (GPS на беспроводной)
Я хочу, чтобы когда служба определения местоположения отключалась или менялась с GPS на беспроводную или беспроводную на GPS, отображается карта. Я стараюсь больше, но приложение не работает.
Любая помощь будет принята с благодарностью. Заранее спасибо.
код Java
if (servicesOK()) {
setContentView(R.layout.map);
if (initMap()) {
Toast.makeText(this, "Ready to map", Toast.LENGTH_SHORT).show();
gotoLocation();
} else {
Toast.makeText(this, "Map not available", Toast.LENGTH_SHORT)
.show();
}
} else {
setContentView(R.layout.activity_error);
}
}
public boolean servicesOK() {
int isAvailable = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(this);
if (isAvailable == ConnectionResult.SUCCESS) {
return true;
} else if (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) {
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable,
this, GPS_ERRORDIALOG_REQUEST);
dialog.show();
} else {
Toast.makeText(this, "can't connect to Google Play Services",
Toast.LENGTH_SHORT).show();
}
return false;
}
private boolean initMap() {
if (Gmap == null) {
SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
Gmap = mapFrag.getMap();
}
return (Gmap != null);
}
private void gotoLocation() {
// Enable my location layer of Google map
Gmap.setMyLocationEnabled(true);
// get LocationManger object from system service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// create criteria object to retrieve provider
Criteria criteria = new Criteria();
// Get the name of best provider
String provider = locationManager.getBestProvider(criteria, true);
// Get Current Location
Location myLocation = locationManager.getLastKnownLocation(provider);
// set map type
Gmap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
// Get latitude of the current location
double latitude = myLocation.getLatitude();
// Get longitude of the current location
double longitude = myLocation.getLongitude();
// create latlng object for the current location
LatLng latlng = new LatLng(latitude, longitude);
}
1 ответ
С помощью этого метода вы можете проверить, какое местоположение включено:
public static String checkGPS(Context context) {
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
String locationProviders = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
return "Not enable";
}
// if gps is enabled and network location is disabled
// note, GPS can be slow to obtain location data but is more accurate
else if (locationProviders.contains("gps") && !locationProviders.contains("network")) {
return "Enable";
} else if (locationProviders.contains("gps") && locationProviders.contains("network")) {
return "Enable + Network";
} else if (!locationProviders.contains("gps") && locationProviders.contains("network")) {
return "Only Network";
} else {
return "Not enable";
}
}
Надеюсь, это поможет вам.