无法在android中获取当前位置的经纬度

时间:2016-05-20 10:26:53

标签: android google-maps

我是Android的新手,我想获取当前位置的经度和纬度,我已经使用此代码获取我的经度和经度,我无法在我的logcat中看到结果,我也移动了谷歌服务。 json文件app /并初始化了mGoogleApiClient和mLastLocation,我没有收到任何错误,为什么我无法看到纬度和经度。请帮助我,并提前谢谢 这是我的应用https://github.com/akashmalla07/GoogleMap的完整代码 请看看是否有人可以帮助我

以下是Mapsactivity的代码

    public class MapsActivity extends FragmentActivity implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener {

         private GoogleMap mMap; 
         AppLocationService appLocationService;
         GoogleApiClient mGoogleApiClient;
         private Location mLastLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) this)
                .addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener) this)
                .addApi(LocationServices.API).build();

        mLastLocation = LocationServices.FusedLocationApi
                .getLastLocation(mGoogleApiClient);
       setUpMapIfNeeded();

    }

    private void setUpMapIfNeeded() {
        if (mMap == null) {
            mMap = ((SupportMapFragment) 
            getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            if (mMap != null) {
                displayLocation();
            }
        }
    }

    private void displayLocation() {

        mLastLocation = LocationServices.FusedLocationApi
                .getLastLocation(mGoogleApiClient);

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

            Log.d("result", latitude + ", " + longitude);

        } else {

          Log.d("result3","(Couldn't get the location. Make sure location is 
          enabled on the device)");
        }
    }

    @Override
    public void onConnected(Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onLocationChanged(Location location) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }
}

这些是进口

  import android.location.Location;
  import android.os.Bundle;
  import android.support.v4.app.FragmentActivity;
  import android.util.Log;

  import com.google.android.gms.common.ConnectionResult; 
  import com.google.android.gms.common.api.GoogleApiClient;
  import com.google.android.gms.location.LocationListener;
  import com.google.android.gms.location.LocationServices;
  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.SupportMapFragment;

更新代码-------------------------------------------

      public class MapsActivity extends Activity implements 
       GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener, LocationListener {

private static final String TAG = MapsActivity.class.getSimpleName();
private LocationRequest mLocationRequest;
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 1000;
private GoogleMap mMap;
AppLocationService appLocationService;
GoogleApiClient mGoogleApiClient;
private Location mLastLocation;

private TextView lblLocation;
private Button btnShowLocation, btnStartLocationUpdates;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    lblLocation = (TextView) findViewById(R.id.lblLocation);
    btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
    btnStartLocationUpdates = (Button) 
      findViewById(R.id.btnLocationUpdates);

    if (checkPlayServices()) {

        // Building the GoogleApi client
        buildGoogleApiClient();

      }

    btnShowLocation.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            displayLocation();
            Log.d("clicked","yes");
        }
    });

}
protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API).build();
}
private boolean checkPlayServices() {
    int resultCode = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(this);
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                    PLAY_SERVICES_RESOLUTION_REQUEST).show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "This device is not supported.", Toast.LENGTH_LONG)
                    .show();
            finish();
        }
        return false;
    }
    return true;
}

@Override
protected void onStart() {
    super.onStart();
    if (mGoogleApiClient != null) {
        mGoogleApiClient.connect();
    }
}

@Override
protected void onResume() {
    super.onResume();

    checkPlayServices();

}

@Override
protected void onStop() {
    super.onStop();
    if (mGoogleApiClient.isConnected()) {
        mGoogleApiClient.disconnect();
    }
}

@Override
protected void onPause() {
    super.onPause();

}
@Override
public void onConnectionFailed(ConnectionResult result) {
    Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = "
            + result.getErrorCode());
}

@Override
public void onConnected(Bundle arg0) {

    displayLocation();


}



private void displayLocation() {
   Log.d("after","clicked");
    mLastLocation = LocationServices.FusedLocationApi
            .getLastLocation(mGoogleApiClient);

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

        lblLocation.setText(latitude + ", " + longitude);
        Log.d("lat",String.valueOf(latitude));

    } else {
        Log.d("lat","No lat");

        lblLocation
                .setText("(Couldn't get the location. Make sure location is enabled on the device)");
    }
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onLocationChanged(Location location) {

}

}

2 个答案:

答案 0 :(得分:0)

您忘了拨打mGoogleApiClient.connect();

    public class MapsActivity extends FragmentActivity implements
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener,
    LocationListener {

     private GoogleMap mMap; 
     AppLocationService appLocationService;
     GoogleApiClient mGoogleApiClient;
     private Location mLastLocation;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) this)
            .addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener) this)
            .addApi(LocationServices.API).build();

 mGoogleApiClient.connect();

}

private void setUpMapIfNeeded() {
    if (mMap == null) {
        mMap = ((SupportMapFragment) 
        getSupportFragmentManager().findFragmentById(R.id.map))
                .getMap();
        if (mMap != null) {
            displayLocation();
        }
    }
}

private void displayLocation() {

    mLastLocation = LocationServices.FusedLocationApi
            .getLastLocation(mGoogleApiClient);

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

        Log.d("result", latitude + ", " + longitude);

    } else {

      Log.d("result3","(Couldn't get the location. Make sure location is 
      enabled on the device)");
    }
}

@Override
public void onConnected(Bundle bundle) {
          mLastLocation = LocationServices.FusedLocationApi
            .getLastLocation(mGoogleApiClient);
   setUpMapIfNeeded();
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onLocationChanged(Location location) {

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}
} 

我已经编辑了你的代码。看看这是否有效。

答案 1 :(得分:0)

您的代码中有2个错误

您未与GoogleApiclient相关联,因此请在使用构建器构建它之后立即调用mgoogleApiclient.connect

使用displayLocation()回调方法调用onConnected()方法。因为,这是GoogleApiClient的成功回调,这意味着您现在已连接到客户端并可以获取您的位置。

此外,您可以在未注册任何 GoogleApikey 的情况下获取位置,直到您的应用中未使用MapsPlaces Api为止。