2016-06-13 33 views
1

我不知道模擬器出了什麼問題。我不能把locatioan使用此命令LocationServices.FusedLocationApi.getLastLocation(googleApiClient)在模擬器上始終爲空

LocationServices.FusedLocationApi.getLastLocation(googleApiClient) 

在我的模擬器支持GPS和谷歌播放服務,但沒有任何工程採取當前locaion。位置= null。需要幫忙。這裏我的代碼:

private void configureGoogleApiClient() { 
     locationRequest = LocationRequest.create(); 
     locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     locationRequest.setInterval(Constant.INTERVAL); 
     locationRequest.setFastestInterval(Constant.FASTINTERVAL); 

     googleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(LocationServices.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .build(); 
     if (googleApiClient != null) { 
      googleApiClient.connect(); 
     } 
    } 

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

    protected void onStop() { 
     // Disconnecting the client invalidates it. 
     if (googleApiClient != null) { 
      googleApiClient.disconnect(); 
     } 
     super.onStop(); 
    } 


    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (googleApiClient != null) { 
      googleApiClient.disconnect(); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      if (googleApiClient != null) 
       googleApiClient.connect(); 
     } 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     if (googleApiClient.isConnected()) { 
      Log.e(MainActivity.class.getSimpleName(), "Is connected"); 
     } else 
      Log.e(MainActivity.class.getSimpleName(), "Is not connected"); 

     if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      Log.e(MainActivity.class.getSimpleName(), "Is connected on GPS"); 
     } else { 
      Log.e(MainActivity.class.getSimpleName(), "Is not connected on GPS"); 
     } 

     Utility.checkPermission(this); 
     location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 

     if (location == null) { 
      Utility.checkPermission(this); 
      LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, this); 
     } 

     if (location != null) { 
      latText.setText("Lat: " + String.valueOf(location.getLatitude())); 
      longText.setText("Long: " + String.valueOf(location.getLongitude())); 
     } else { 
      latText.setText(getString(R.string.error_find_location)); 
      longText.setText(getString(R.string.error_find_location)); 
     } 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.e(MainActivity.class.getSimpleName(), connectionResult.toString()); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     currentLocation = location; 
     if (googleApiClient != null) 
      if (googleApiClient.isConnected() || googleApiClient.isConnecting()) { 
       googleApiClient.disconnect(); 
       googleApiClient.connect(); 
      } else if (!googleApiClient.isConnected()) { 
       googleApiClient.connect(); 
      } 
     String msg = "Updated Location: " + Double.toString(location.getLatitude()) + "," + Double.toString(location.getLongitude()); 
     Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
     configureView(); 
    } 
+0

您正在使用哪個模擬器? –

+0

我正在使用AVD模擬器屬性:Nexus 5,api 22,Android 5.1 @JayShah –

回答

1

我的猜測是最後的位置只顯示最後一個位置。它實際上並沒有試圖找出位置。在您的手機上,另一個應用程序可能要求位置所以,有一個最後的位置。

我已經添加此代碼來請求位置,如果沒有。

Location userLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 
if (userLocation == null) { 
    LocationRequest locationRequest = new LocationRequest(); 
    locationRequest.setNumUpdates(1); 
    locationRequest.setInterval(0); 
    locationRequest.setPriority(PRIORITY_HIGH_ACCURACY); 
    LocationServices.FusedLocationApi.requestLocationUpdates(
      googleApiClient, locationRequest, 
      new LocationListener() { 
       @Override 
       public void onLocationChanged(Location location) { 
        LocationServices.FusedLocationApi.removeLocationUpdates(
          googleApiClient, 
          this); 
       } 
      });