2017-11-12 6 views
0

켜기 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) { 

} 
} 

내가 어디에서 잘못하고 있는지 알아낼 수있는 사람이 있습니까?

답변

0

여러 위치에서 displayLocation을 호출했습니다. 그래서 goOnline에서 startLocationUpdate를 호출하고 onLocationChanged를 호출하여 displayLocation을 호출하면됩니다. locationUpdates가 UR에 따라 안드로이드 시스템에 의해 다음 이벤트가 시작될 때까지 기다리므로 최신 위치를 얻지 못할 것입니다. 또한 가장 빠른 간격을 1 초로 설정하면 즉시 위치를 업데이트 할 수 있습니다. 희망이 도움이됩니다.

+0

isOnline에서 displayLocation()을 제거합니다. 그리고 가장 빠른 간격을 1 초로 설정합니다. 스틸입니다. 현재 위치가 표시되지 않습니다. – Piyu

+0

'W/GCoreFlp : getLastLocation()에 대해 반환 할 위치가 없습니다. ' – Piyu