2015-09-01 59 views
0

無論我做什麼,我都無法在沒有啓用wifi的情況下獲取當前位置。啓用了無線網絡時,該代碼的工作只:無法獲取沒有wifi的位置

if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
    provider = LocationManager.GPS_PROVIDER; 
else if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
    provider = LocationManager.NETWORK_PROVIDER; 
else if(locationManager.isProviderEnabled(LocationManager.PASSIVE_PROVIDER)) 
    provider = LocationManager.PASSIVE_PROVIDER; 

Location location = locationManager.getLastKnownLocation(provider); 

當無線網絡被禁用,location爲空。

而下面的代碼永遠不會奏效(即使無線網絡啓用):

protected synchronized void buildGoogleApiClient() { 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .addApi(LocationServices.API) 
      .build(); 
} 

onCreate()

buildGoogleApiClient(); 

onStart()

mGoogleApiClient.connect(); 

而這裏的onConnected()

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

    if(mLastLocation == null) 
    { 
     disableButtons(); 
    } 
    else 
    { 
     String userLocation = FindLocation.getLocatoinName(mLastLocation); 
     userLocationDetails = new LocationStruct(mLastLocation.getLatitude(), mLastLocation.getLongitude(), userLocation); 
    } 
} 

Inside onConnected()mLastLocation始終爲空。

我試過兩部手機:聯想A820 API 16三星Galaxy S4 API 19。兩部手機的結果相同。

回答

1

不能依賴Last Known Location來始終可用。 在你的onConnected()你只在查看最後一個已知的位置。

你必須建立在你的onConnected()

mLocationRequest = LocationRequest.create() 
      .setPriority(locationPriority) // LocationRequest.PRIORITY_HIGH_ACCURACY 
      .setInterval(10 * 1000)  // 10 * 1000 10 seconds, in milliseconds 
      .setFastestInterval(1 * 1000); 

然後,LocationRequest你有權要求位置更新:

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 

你會再得到位置onLocationChanged(Location location)

+0

'onLocationChanged() '永遠不會叫... –

+0

@Alaa M.你可以發佈你的整個活動,你試試嗎? –