Android 不会自动调用onLocationChanged
我对Android中的onLocationChanged事件有问题。以下是触发点:Android 不会自动调用onLocationChanged,android,geolocation,gps,locationmanager,locationlistener,Android,Geolocation,Gps,Locationmanager,Locationlistener,我对Android中的onLocationChanged事件有问题。以下是触发点: case R.id.start: { Points.add(overlay.getMyLocation()); // Points' type is ArrayList<GeoPoint> mgr.requestLocationUpdates(best, 0, 3, locationListener); } break; 因此,onLocationChanged只调用
case R.id.start: {
Points.add(overlay.getMyLocation()); // Points' type is ArrayList<GeoPoint>
mgr.requestLocationUpdates(best, 0, 3, locationListener);
}
break;
因此,onLocationChanged只调用一次,并且仅在我按下“开始”后调用。它应该在每次位置改变时自动调用,对吗?就我而言,不是这样。请帮帮我。这个问题似乎已经解决了。 在onCreate中,我添加了:
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
best = mgr.getBestProvider(crit, false);
mgr.requestLocationUpdates(best, 0, 1, locationListener);
onLocationChanged现在看起来是这样的:
@Override
public void onLocationChanged(Location location) {
i++;
nextPoint = overlay.getMyLocation();
latitude = nextPoint.getLatitudeE6();
longtitude = nextPoint.getLongitudeE6();
lastPoint = new GeoPoint((int) latitude, (int) longtitude);
Points.add(lastPoint);
MapOverlay mapOverlay = new MapOverlay(Points.get(i - 1), Points.get(i));
map.getOverlays().add(mapOverlay);
mMapController.animateTo(Points.get(i));
nextPoint = null;
lastPoint = null;
}
还有,非常重要的方法:
@Override
protected void onResume() {
super.onResume();
mgr.requestLocationUpdates(best, 10000, 1, locationListener);
}
@Override
protected void onPause() {
super.onPause();
mgr.removeUpdates(locationListener);
}
还有一些新权限:
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
您是否已将使用位置服务的权限添加到清单中,如下所示:
?当然,这是我的权限部分:虽然已经很晚了,但我希望此评论可以帮助其他人,请查看此链接:如果您使用访问精细位置
,则无需访问粗略位置。只是想让你知道;)@lomza,有什么区别?@gumuruh,因为ACCESS\u FINE\u LOCATION
包括WiFi、手机和GPS定位,而ACCESS\u rough\u LOCATION
仅包括手机和WiFi。所以第一个许可基本上包括第二个。@lomza,这是很好的澄清。谢谢你。我只是从你那里知道的D@RaviVaniyamgr
是LocationManager,您可以使用LocationManager=(LocationManager)requireContext()获得它
-locationListener
是AndroidlocationListener
接口的实现,best
是一个字符串,其中包含最符合您通过的标准的提供商名称。
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />