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