下面的代码用于从另一个片段获取当前位置。但是由于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
变量。