Android 위치 정보를 얻으려고합니다.이 코드는 아직 반환되지 않았습니다. 스택 오버플로를 검색했습니다.Android 위치 업데이트가 반환되지 않습니다.
이 버그를 발견했습니다 : https://code.google.com/p/android/issues/detail?id=57707 하지만 지금까지 수정 사항이 없거나 찾을 수 없습니다. 이것은 코드입니다. 어떤 도움이 많이 주시면 감사하겠습니다
Criteria criteria = new Criteria();
criteria.setCostAllowed(true);
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
String provider = lm.getBestProvider(criteria, true);
Location l = lm.getLastKnownLocation(provider);
final String date = fmtForPresenter.print(dt);
if(l==null) {
lm.requestLocationUpdates(provider, 100, 200,
new android.location.LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Log.e("PROVIDER", "PRO: " + provider);
}
@Override
public void onProviderDisabled(String provider) {
Log.e("PROVIDER", "PRO: " + provider);
}
@Override
public void onLocationChanged(final Location location) {
lat = location.getLatitude();
lng = location.getLongitude();
presenter.getFoot(userProfile.getToken(),"public",lat,lng,date);
if ((ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED)) {
lm.removeUpdates(this);
}
}
});
}
else {
lat = l.getLatitude();
lng = l.getLongitude();
presenter.getFoot(userProfile.getToken(),"public",lat,lng,date);
}
편집 :
내가 전화 위치를 다시 작동 다시 시작하지만 난 매번이 자신의 휴대 전화를 다시 시작하기 위해 내 모든 고객에게 질수 있기 때문에 솔루션으로이을 해달라고하는 경우 문제
이것은 일반적으로 "GPSTracker"라는 이름으로 사용되는 매우 인기있는 "안티 패턴"입니다. 이것의 주된 문제는 코드가 위치 업데이트를 요청하지만 실제로 업데이트를 사용하지 않는다는 것입니다. onLocationChanged()에는 아무것도 없다. 기기가 위치 정보를 이미 알고있는 경우 첫 번째 통화에서만 작동합니다. 이러한 종류의 코드 문제에 대해서는 [Gabe Sechan의 블로그 게시물] (http://gabesechansoftware.com/location-tracking/)이 있습니다. –
그래,하지만 내 코드를 onLocationChanged에 추가하면 제대로 작동하고 내 코드 에서처럼 업데이트를 제거합니다. –
@MarkusKauppinen 맞습니다.하지만이 코드는 위치를 한 번 가져 오는 것입니다. 업데이트를 원할 경우 onLocationChanged()를 사용할 수 있으므로 필요하지 않습니다. – ThePunisher