켜기 location_switch
클릭 사용자가 온라인으로 가서 현재 위치를 확인하십시오. 그러나 스위치를 클릭하면 현재 위치가 표시되지 않습니다. 응용 프로그램을 검사하기 위해 에뮬레이터를 사용하고 있습니다. 에뮬레이터에서 위치를 변경하더라도 작동하지 않습니다. 위치를 확인하면 Firebase 데이터베이스이 작동하지만 현재 위치가 표시되지 않습니다.D/오류 : 사용자 위치를 얻을 수 없음 :
location_switch.setOnCheckedChangeListener(new MaterialAnimatedSwitch.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(boolean isOnline) {
if (isOnline) {
startLocationUpdates();
displayLocation();
Snackbar.make(mapFragment.getView(), "You are online", Snackbar.LENGTH_SHORT)
.show();
} else {
stopLocationUpdates();
mCurrent.remove();
Snackbar.make(mapFragment.getView(), "You are offline", Snackbar.LENGTH_SHORT)
.show();
}
}
});
}
private void stopLocationUpdates() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
private void displayLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
if (location_switch.isChecked()) {
final double latitute = mLastLocation.getLatitude();
final double longitude = mLastLocation.getLongitude();
/*Update To FireBase*/
geoFire.setLocation(FirebaseAuth.getInstance().getCurrentUser().getUid(), new GeoLocation(latitute, longitude), new GeoFire.CompletionListener() {
@Override
public void onComplete(String key, DatabaseError error) {
/*Add Marker*/
if (mCurrent != null) {
mCurrent.remove();
mCurrent = mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car))
.position(new LatLng(latitute, longitude))
.title("You"));
/*Move camera to this postion*/
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitute, latitute), 15.0f));
}
}
});
}
} else {
Log.d("ERROR", "Can Not Get Your Location: ");
}
}
private void startLocationUpdates() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
@Override
public void onLocationChanged(Location location) {
mLastLocation = location;
displayLocation();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
displayLocation();
startLocationUpdates();
}
@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
}
내가 어디에서 잘못하고 있는지 알아낼 수있는 사람이 있습니까?
isOnline에서 displayLocation()을 제거합니다. 그리고 가장 빠른 간격을 1 초로 설정합니다. 스틸입니다. 현재 위치가 표시되지 않습니다. – Piyu
'W/GCoreFlp : getLastLocation()에 대해 반환 할 위치가 없습니다. ' – Piyu