我有一个GoogleMap
的实例,它运行正常。如何确定它是否可以检索当前位置?
我有一个方法可以识别位置是否可用,但即使我将手机设置为飞行模式,它也会返回true,但我的位置没有更新。有没有办法检测GoogleMap是否可以访问我的位置以及指导用户启用网络的行动方式应该是什么?
以下是我访问网络的代码:
public static boolean isLocationEnabled(Context context)
{
LocationManager lm = null;
boolean gps_enabled = false;
boolean network_enabled = false;
if(lm==null)
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (lm != null)
{ gpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
networkEnabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}
if(!gpsEnabled && !networkEnabled){
DevLog.e("NETWORK NOT AVAILABLE");
return false;
}
else
{
DevLog.e("NETWORK IS AVAILABLE", gpsEnabled, networkEnabled);
return true;
}
}
答案 0 :(得分:0)
您需要了解的是,GPS与网络不同,因此即使您将手机置于飞行模式,GPS也能正常工作,并为您提供位置。
尝试按以下方式更改代码
if (lm != null){
gpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
if(gpsEnabled && isNetworkAvailable()){
DevLog.e("NETWORK IS AVAILABLE", gpsEnabled, networkEnabled);
return true;
} else if(!isNetworkAvailable()){
DevLog.e("NETWORK NOT AVAILABLE");
return false;
} else if(!gpsEnabled ){
DevLog.e("GPS NOT AVAILABLE");
return false;
} else{
DevLog.e("GPS & NETWORK ARE NOT AVAILABLE");
return false;
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
这对你有用 通过将手机更改为飞行模式来检查....!
答案 1 :(得分:-1)
Google Maps API具有位置功能,您可以使用它,例如:
private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
mMarker = mMap.addMarker(new MarkerOptions().position(loc));
if(mMap != null){
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
}
}
};
然后设置地图的监听器:
mMap.setOnMyLocationChangeListener(myLocationChangeListener);
当地图首次找到位置时,将调用此方法。
根本不需要LocationService或LocationManager。