下面的代码用于从另一个片段获取当前位置。但是由于Google“ Android中需要Google api客户端参数”,因此在日志中出现错误。这使我的应用程序崩溃了,所以有人知道确切的问题是什么以及如何解决它...

public class GPSTracker extends Activity implements LocationListener, ConnectionCallbacks, OnConnectionFailedListener
     {

private final Context mContext;
protected LocationManager locationManager;
boolean canGetLocation = false;

private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0; // 10 meters

// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 20; // 1 minute

Location location; // location
double latitude; // latitude
double longitude; // longitude

SharedData gpsSharedData;
public GoogleApiClient mGoogleApiClient;
private Location mLastLocation;

public GPSTracker(Context context) {
    this.mContext = context;
    getLocation();
}

/**
 * Method to verify google play services on the device
 * */
public boolean checkPlayServices() {
    int resultCode = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(mContext);
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode,
                    GPSTracker.this, PLAY_SERVICES_RESOLUTION_REQUEST)
                    .show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "This device is not supported.", Toast.LENGTH_LONG)
                    .show();
            finish();
        }
        return false;
    }
    return true;
}

// Creating google api client object
public synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API).build();
}

public void getLocation() {
    // TODO Auto-generated method stub
    mLastLocation = LocationServices.FusedLocationApi
            .getLastLocation(mGoogleApiClient);

    if (mLastLocation != null) {
        latitude = mLastLocation.getLatitude();
        longitude = mLastLocation.getLongitude();

    } else {
        System.out
                .println("(Couldn't get the location. Make sure location is enabled on the device)");
    }
}

public void stopUsingGPS() {
    if (locationManager != null) {
        locationManager.removeUpdates(GPSTracker.this);
    }
}

/**
 * Function to get latitude
 * */
public double getLatitude() {
    if (location != null) {
        latitude = location.getLatitude();
    }

    // return latitude
    return latitude;
}

public double getLongitude() {
    if (location != null) {
        longitude = location.getLongitude();
    }

    // return longitude
    return longitude;
}

public boolean canGetLocation() {
    return this.canGetLocation;
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub


}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderDisabled(String provider) {
    // TODO Auto-generated method stub

}

@Override
public void onConnected(Bundle arg0) {
    // TODO Auto-generated method stub
    // Once connected with google api, get the location
    getLocation();
}



@Override
public void onConnectionSuspended(int arg0) {
    // TODO Auto-generated method stub
    mGoogleApiClient.connect();
}

@Override
public void onConnectionFailed(ConnectionResult arg0) {

    System.out
            .println("Connection failed: ConnectionResult.getErrorCode() = "
                    + arg0.getErrorCode());
}


}

最佳答案

请在buildGoogleApiClient();的第一行中调用getLocation(),您尚未初始化mGoogleApiClient变量。

10-08 06:22