getLastKnownLocation이 null을 반환합니다.
이것에 대한 몇 가지 질문을 읽었지만 필요한 답을 찾지 못했습니다.
그래서, 제가지도를 설정했고 현재 GPS 위치를 파악하고 싶습니다. 내 변수가 NULL이 아닌지 확인했지만 결과는 다음과 같습니다.
getLastKnownLocation(provider, false);
그래도 null을 제공하므로 도움이 필요한 곳입니다. COARSE + FINE 위치에 대한 권한을 추가했습니다. 하지만 전화 요금에서 예측할 수없는 데이터 흐름 비용에 대해별로 만족스럽지 않기 때문에 일반적으로 전화에 대해 모든 종류의 네트워크 데이터를 비활성화합니다. 그래서이 테스트를 위해 WiFi 만 활성화하고 연결했습니다.
이것을 가능하게하기 위해 더 활성화해야 할 것이 있습니까? WiFi가 충분해야한다고 생각합니까?
이 방법을 사용하여 마지막으로 알려진 위치를 가져옵니다.
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation() {
mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
if (l == null) {
continue;
}
if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
// Found best last known location: %s", l);
bestLocation = l;
}
}
return bestLocation;
}
해야 할 때 새로운 위치 API와 이전 위치 API를 함께 혼합하고 있습니다.
마지막으로 알려진 위치를 얻으려면 전화 만하면됩니다.
compile "com.google.android.gms:play-services-location:11.0.1"
mLocationClient.getLastLocation();
위치 서비스가 연결되면.
새 위치 API 사용 방법 읽기
http://developer.android.com/training/location/retrieve-current.html#GetLocation
private void getLastLocationNewMethod(){
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// GPS location can be null if GPS is switched off
if (location != null) {
getAddress(location);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("MapDemoActivity", "Error trying to get last GPS location");
e.printStackTrace();
}
});
}
네트워크 공급자로부터 캐시 된 위치를 가져 오려고합니다. 유효한 수정을 얻을 때까지 몇 분 동안 기다려야합니다. 네트워크 공급자의 캐시가 비어 있기 때문에 분명히 null이 표시됩니다.
이것을 시도해보십시오.
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation() {
Location oldLoc;
while (true){
oldLoc = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (oldLoc == null){
continue;
}
else {
break;
}
}
return oldLoc;
}
더 빠른 결과를 위해 GPS_PROVIDER 대신 NETWORK_PROVIDER를 사용할 수 있습니다.
이 코드 추가
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
전 기능 :
locationManagerObject.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new LocationListener())
뿐만 아니라 기능 : locationManagerObject.getLastKnownLocation(LocationManager.GPS_PROVIDER)
ur 줄을
Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
참고 URL : https://stackoverflow.com/questions/20438627/getlastknownlocation-returns-null
'developer tip' 카테고리의 다른 글
Android 툴바 다른 조각에 대한 메뉴 항목 추가 (0) | 2020.11.03 |
---|---|
알파벳을 열거하는 가장 빠른 방법 (0) | 2020.11.03 |
Ubuntu에서 JDK 10을 설치하는 방법은 무엇입니까? (0) | 2020.11.03 |
템플릿에 Django 양식 필드의 값을 어떻게 표시합니까? (0) | 2020.11.03 |
++ 연산자에 관한 C와 C ++의 차이점 (0) | 2020.11.02 |