2015-09-01 62 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.你可以发布你的整个活动,你试试吗? –