【发布时间】:2017-11-12 04:16:31
【问题描述】:
在location_switch点击用户上网并检查当前位置。但在开关点击时,它没有显示我的当前位置。我正在使用模拟器来检查应用程序。即使我在模拟器中更改了位置,但它不起作用。检查位置后,它将存储在 Firebase 数据库 中,该数据库正在运行,但我的当前位置未显示。
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) {
}
}
谁能帮我找出我做错了什么?
【问题讨论】:
标签: android google-maps google-location-services