【问题标题】:D/ERROR: Can Not Get Your Location:D/错误:无法获取您的位置:
【发布时间】: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


    【解决方案1】:

    您在很多地方都调用了 displayLocation。因此,在 goOnline 上只需调用 startLocationUpdate 并在 onLocationChanged 中调用 displayLocation。由于 locationUpdates 等待 android 系统根据您的 FASTEST INTERVAL 触发下一个事件,因此您将无法获得最新位置。还将 FASTEST INTERVAL 设置为 1 秒以进行即时位置更新。希望这会有所帮助。

    【讨论】:

    • 我从 isOnline 中删除了 displayLocation()。并将 FASTEST INTERVAL 设置为 1 秒,但它是 Steel,它没有显示我当前的位置
    • W/GCoreFlp: No location to return for getLastLocation()
    猜你喜欢
    • 2020-03-26
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多