使用Google Map Android时,OnLocationChanged CallBacked永远不会被调用?

时间:2017-07-19 08:57:14

标签: android google-maps android-maps-v2

Hello Guys这可能会被问过很多次,但我找不到任何解决方案,所以我发这个帖子让我解释我的问题我有简单的谷歌地图应用程序在那onlocationchanged回调永远不会被调用不知道在哪里我犯了错误让我发布代码:

public  class VisitTravel extends  AppCompatActivity implements
        LocationListener,
        GoogleApiClient.ConnectionCallbacks,
        OnMapReadyCallback,
        GoogleApiClient.OnConnectionFailedListener {

private static final String TAG = "LocationActivity";
private static final long INTERVAL = 1000 * 10;
private static final long FASTEST_INTERVAL = 1000 * 5;

        LocationRequest mLocationRequest;
        GoogleApiClient mGoogleApiClient;
        Location mCurrentLocation;
GoogleMap mGoogleMap;

protected void createLocationRequest() {
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(INTERVAL);
        mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        }

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_visit_travel);
    if (!isGooglePlayServicesAvailable()) {
        finish();
    }
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    createLocationRequest();

    SupportMapFragment mapFrag = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFrag.getMapAsync(this);


   /// tvLocation = (TextView) findViewById(R.id.tvLocation);

}

@Override
public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart fired ..............");
        mGoogleApiClient.connect();
        }

@Override
public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop fired ..............");
        mGoogleApiClient.disconnect();
        Log.d(TAG, "isConnected ...............: " + mGoogleApiClient.isConnected());
        }

private boolean isGooglePlayServicesAvailable() {
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (ConnectionResult.SUCCESS == status) {
        return true;
        } else {
        GooglePlayServicesUtil.getErrorDialog(status, this, 0).show();
        return false;
        }
        }

@Override
public void onConnected(Bundle bundle) {
        Log.d(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected());
    Location mLastLocations = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
    Log.d("insideready","ready");
    if (mLastLocations != null) {
        LatLng latLng = new LatLng(mLastLocations.getLatitude(), mLastLocations.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(latLng);
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
        CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(
                latLng, 12);
        mGoogleMap.animateCamera(cameraUpdate);}
else {
        startLocationUpdates();

    }
}
    protected void startLocationUpdates() {
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            Toast.makeText(this, "LocationNotUpdated", Toast.LENGTH_SHORT).show();
            ActivityCompat.requestPermissions(VisitTravel.this,
                    new String[]{android.Manifest.permission
                            .ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
                    20);

        } else {
            if (mGoogleApiClient.isConnected()) {
                createLocationRequest();
                Log.e("locupdate","connected");
                PendingResult<Status> pendingResult = LocationServices.FusedLocationApi.requestLocationUpdates(
                        mGoogleApiClient, mLocationRequest, this);

                //       Toast.makeText(this, "LocationUpdatedStart", Toast.LENGTH_SHORT).show();
            }
        }
    }

@Override
public void onConnectionSuspended(int i) {

        }

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.d(TAG, "Connection failed: " + connectionResult.toString());
        }

@Override
public void onLocationChanged(Location location) {
        Log.d(TAG, "Firing onLocationChanged..............................................");
        mCurrentLocation = location;
     //   mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
     //   updateUI();
        }




protected void stopLocationUpdates() {
        LocationServices.FusedLocationApi.removeLocationUpdates(
        mGoogleApiClient, this);
        Log.d(TAG, "Location update stopped .......................");
        }

@Override
public void onResume() {
        super.onResume();
        if (mGoogleApiClient.isConnected()) {
      //  startLocationUpdates();
        Log.d(TAG, "Location update resumed .....................");
        }
        }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        mGoogleMap.setMyLocationEnabled(true);
    }
}

在这个关于LocationChanged永远不会被调用任何人可以帮助我和额外的信息我有后台服务,用于每隔一定时间获取位置,因为我有单独的谷歌api客户端实例是影响这一个?提前致谢

0 个答案:

没有答案