안녕하세요 사용자 위치를 얻을 수있는 Android지도 애플리케이션을 만드는 중입니다. 사용자가지도를 열 때 위치가 정확하지 않고 천천히 위치를 찾아냅니다.getAccuracy()가 100보다 작을 때 처리기를 중지하는 방법
나는 이것을 시도했다. 그러나 그것은 여전히 핸들러를 호출하고 TOASTS는 멈추지 않을 것입니다.
private LocationManager locationManager;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps_page);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
handler.postDelayed(runnable,3000);
}
@Override
public void onProviderDisabled(String provider) {
handler.removeCallbacks(runnable);
}
});
private Runnable runnable = new Runnable() {
@Override
public void run() {
getCurrentLocation();
Toast.makeText(mapsPage.this, "GETTING LOCATION", Toast.LENGTH_SHORT).show();
handler.postDelayed(this, 3000);
}
};
private void getCurrentLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
if (location != null) {
longitude = location.getLongitude();
latitude = location.getLatitude();
moveMap();
Integer loc = Math.round(location.getAccuracy());
textings.setText(Integer.toString(loc));
if(loc <= 100)
{
handler.removeCallbacks(runnable);
Toast.makeText(mapsPage.this, "HANDLER STOPPED", Toast.LENGTH_SHORT).show();
}
}
}
//Function to move the map
private void moveMap() {
LatLng latLng = new LatLng(latitude, longitude);
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(17));
mMap.addMarker(new MarkerOptions().position(latLng).draggable(false));
}
나는 사용자의 위치를 확인 5 초마다 실행 핸들러를 추가 한
하고 getAccuracy 데이터가 같거나 낮은 중 하나 인 경우 100보다가 중지됩니다. 어떻게하면 좋을까요?
안녕하세요, 저는 이걸 가지고 모든 단호한 사람을 끌어 냈습니다. 그리고 저는 제 대답을 찾았습니다. 나는 timerTask를 사용했고 snackbars로 토스트를 교체했으며 정말 잘 돌아갔다. 난 당신의 코드를 시도하고 그것을 작동하고, 당신은 upvote 자격과 대답을받을 자격이. 도움말 및 설명에 다시 한 번 감사드립니다! : D –
하지만 사용자 위치를 효율적으로 찾아내는 코드 또는 접근 방식을 사용하고 있습니까 아니면 다른 방법을 고려해야합니까? –