Java Android融合位置提供程序:从未调用OnLocationChange

Java Android融合位置提供程序:从未调用OnLocationChange,java,android,fusedlocationproviderapi,android-fusedlocation,Java,Android,Fusedlocationproviderapi,Android Fusedlocation,我对融合位置提供程序api有一个很大的问题,我使用的所有方法(例如,在OnConnection中,我得到最后一个已知位置)都可以工作,除了位置更改之外,我不知道真正的问题是什么,因为我在MapView的其他片段中使用了相同的代码,它可以毫无问题地工作。 这是我的代码: public class MissionsFragment extends Fragment implements SwipeRefreshLayout.OnRefreshListener,

我对融合位置提供程序api有一个很大的问题,我使用的所有方法(例如,在OnConnection中,我得到最后一个已知位置)都可以工作,除了位置更改之外,我不知道真正的问题是什么,因为我在MapView的其他片段中使用了相同的代码,它可以毫无问题地工作。 这是我的代码:

    public class MissionsFragment extends Fragment implements 
    SwipeRefreshLayout.OnRefreshListener,
            GoogleApiClient.ConnectionCallbacks,
            GoogleApiClient.OnConnectionFailedListener,
            LocationListener{
    LocationRequest mLocationRequest;
    GoogleApiClient mGoogleApiClient;
    LatLng latLng;
View view;
     @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            view = inflater.inflate(R.layout.fragment_jobs, container, false);
            ButterKnife.bind(this, view);
            return view;
        }
     @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            buildGoogleApiClient();
            mGoogleApiClient.connect();
        }


        @Override
        public void onConnected(@Nullable Bundle bundle) {
            Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
            if (mLastLocation != null) {
                latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
                Toast.makeText(getActivity(), latLng.toString(), Toast.LENGTH_SHORT).show();
            }
            mLocationRequest = new LocationRequest();
            mLocationRequest.setInterval(2000);
            mLocationRequest.setFastestInterval(1000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
            //mLocationRequest.setSmallestDisplacement(0.1F); //1/10 meter

            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
        }

        @Override
        public void onConnectionSuspended(int i) {

        }

        @Override
        public void onLocationChanged(Location location) {
            latLng = new LatLng(location.getLatitude(), location.getLongitude());
            Toast.makeText(getActivity(), latLng.toString(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

        }

        protected synchronized void buildGoogleApiClient() {
            mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .addApi(LocationServices.API)
                    .build();
        }

        @Override
        public void onPause() {
            super.onPause();
            if (mGoogleApiClient != null) {
                LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
            }
        }
    }

如果我们只使用MapView,是否有必要获取位置,或者我应该在当前代码中更新soemthing?

您是否尝试将设备移动一段距离,然后更改了OnLocation请参阅此处您可能遗漏了@JagjitSingh问题在于同一设备,我称之为另一个活动,代码有效,但在此情况下当前活动它根本不工作。检查设备是否有googleplayservices或位置是否已启用?我使用的是Emulator(android 5.1),位置已启用(我获取最后一个已知位置)好的,那么你推自定义latlong吗?你是否尝试将设备移动一段距离,然后更改了ONLOCATION参考此处你可能错过了@JagjitSingh问题在于同一设备,我调用了另一个活动,代码工作,但在当前活动中它根本不工作。检查设备是否有错误googleplayservices或者如果启用了位置?我使用的是Emulator(android 5.1),启用了位置(我得到最后一个已知的位置)好的,然后你推自定义latlong?