所以我想顯示我的位置的經緯度,但是隻有當我再次啓動應用程序時纔會顯示我的位置。 當我安裝應用程序,並第一次啓動它沒有收到位置。 什麼是第一次獲得當前位置的簡單方法?我做錯了什麼?Google位置服務getLastLocation在第一次啓動應用程序時爲空
private final static String LOG_TAG = MainActivity.class.getName();
private GoogleApiClient googleApiClient;
private Location lastLocation;
private LocationRequest locationRequest;
private TextView locationLatitude;
private TextView locationLongitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationLatitude = (TextView) findViewById(R.id.latitude_text);
locationLongitude = (TextView) findViewById(R.id.longitude_text);
buildGoogleApiClient();
}
@Override
protected void onStart() {
super.onStart();
googleApiClient.connect();
}
@Override
protected void onStop() {
super.onStop();
googleApiClient.disconnect();
}
private void buildGoogleApiClient() {
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.d(LOG_TAG, "onConnected");
locationRequest = LocationRequest.create();
locationRequest.setInterval(1000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if(Build.VERSION.SDK_INT < 21){
lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
}
else {
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) {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
else{
lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
}
}
if(lastLocation != null){
locationLatitude.setText(String.valueOf(lastLocation.getLatitude()));
locationLongitude.setText(String.valueOf(lastLocation.getLongitude()));
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == 1){
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
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) {
lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
}
}
}
}
@Override
public void onConnectionSuspended(int i) {
Log.d(LOG_TAG, "onConnectionSuspended");
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.d(LOG_TAG, "onConnectionFailed");
}
@Override
public void onLocationChanged(Location location) {
Log.d(LOG_TAG, "onLocationChanged");
locationLatitude.setText(String.valueOf(location.getLatitude()));
locationLongitude.setText(String.valueOf(location.getLongitude()));
}
有時候最後的位置不可用,並會爲空。考慮將最後一個位置保存在此場景的首選項中,或者返回到第一次下載應用程序時所遵循的過程。 – danny117