2016-06-07 19 views
0

У меня есть кнопка, каждый раз, когда пользователь нажимает на нее, я вызываю javascriptinterface getLocation(), если службы определения местоположения отключены, пользователь вводит настройки, чтобы пользователь включил его.местоположение доступно через несколько секунд после включения служб определения местоположения

Я нахожусь по адресу onConnected и onLocationChanged. Каждый раз, когда я открываю свое приложение, onConnected получает увольнение и получит его. Но я заметил, что, когда я включаю настройки местоположения из настроек и сразу прихожу к приложению, onConnected уволен, но местоположение по-прежнему null. Похоже, есть задержка или что-то в этом роде. До тех пор, пока примерно через 3 секунды, я попробую еще раз, он будет работать и получить место для меня.

Вот мой родственный код:

Android сторона:

protected Location location; 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.web_view); 

    webView = (WebView) findViewById(R.id.webview); 

    ...... 
} 

// JavaScript Interface for location on Pick Listing Page 
public class LocationInterface 
{ 
    @JavascriptInterface 
    public String getLocation() throws JSONException 
    { 
     JSONObject json = new JSONObject(); 
     if (location != null) 
     { 
      json.put("lat", location.getLatitude()); 
      json.put("lon", location.getLongitude()); 
      return(json.toString()); 
     } 
     else 
     { 
      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
      startActivity(intent); 
     } 
     return(null); 
    } 
} 

......//many override lifecycle methods here 

@Override 
public void onConnected(Bundle connectionHint) 
{ 
    location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 
} 

@Override 
public void onLocationChanged(Location newLocation) 
{ 
    location = newLocation; 
} 

Мой вопрос, как я могу получить место без задержки.

ответ

0

Убедитесь, что вы запросили обновления местоположения в действии onStart(), чтобы при возврате из настроек местоположения активность запрашивала обновления местоположения.

+0

добавить следующее: 'LocationServices.FusedLocationApi.requestLocationUpdates (GoogleApiClient, locationRequest, это);'? –

+0

похоже не работает. Он убивает приложение. –

+0

Не могли бы вы поделиться своим выходом logcat? –

0

Я нашел выход в конце концов:

добавить одно условие для getLocation():

.... 
    if (location != null) 
    { 
     .... 
    } 
    else if (location == null && isLocationEnabled(context) 
    { 
     long startTime = System.currentTimeMillis(); 
     while (location == null && (System.currentTimeMillis()-startTime) < 5000) 
     { 
      location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 
     } 
     if (location != null) 
     { 
      json.put("lat", location.getLatitude()); 
      json.put("lon", location.getLongitude()); 
      return(json.toString()); 
     } 
     return(null); 
    } 
    else 
    { 
     Intent intent = .... 
     .... 
    } 
    return(null); 
Смежные вопросы