2015-07-24 1 views
0

Я тестирую приложение Android на устройстве с SIM-картой без обслуживания сотовой связи. У меня есть и «грубый» и «отлично» API для определения местоположения включается с помощью манифеста:Проблемы с FusedLocationAPI на устройстве без службы сотовой связи

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.LOCATION_HARDWARE" /> 

Вот код, с помощью которого я инициализация GoogleApiClient с помощью унаследованного метода деятельности:

import com.google.android.gms.common.api.GoogleApiClient.*; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.location.LocationListener; 
import com.google.android.gms.location.LocationServices; 

.... 

protected GoogleApiClient googleApiClient; 
protected boolean locationServicesIsAvailable = false; 
protected Location lastKnownLocation; 

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

protected Location getLastKnownLocation() { 
    if(googleApiClient == null) { 
     buildGoogleApiClient(); 
     return null; 
    } else 
     return LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    locationServicesIsAvailable = true; 
    // @TODO signal the rest of the app that current location is now available 
    lastKnownLocation = getLastKnownLocation(); 
    API.log("Geo location reported! => " + lastKnownLocation.toString()); 
} 

Проблема заключается в том, что обратный вызов onConnected() не срабатывает, даже если GPS включен на устройстве. Что я делаю не так?

+3

Вы вызываете googleApiClient.connect() после его создания? –

+1

Да, @ DanielNugent имеет смысл. Из документов: «С определенными интерфейсами обратного вызова вы готовы вызвать connect(). Чтобы изящно управлять жизненным циклом соединения, вы должны вызвать connect() во время действия onStart() (если вы не хотите подключиться позже) , затем вызовите функцию disconnect() во время метода onStop(). " – CaseyB

ответ

0

Понял, что опубликую ответ, чтобы закрыть это - спасибо Daniel & CaseyB! Проблема заключалась в том, что я подключался к клиенту API, но не вызывал метод connect(). Добавление этой строки в методе buildGoogleApiClient(), сразу после вызова build() цепи на googleApiClient было исправление:

googleApiClient.connect(); 

Вы также могли приковать в connect() вызова после build().

Смежные вопросы