Я пытаюсь получить координаты пользователя, используя Интернет (но без GPS)GoogleApiClient getLastLocation возвращает нуль без GPS
манифеста:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
в onCreate()
метод Я посвящаю client
:
if (client == null) {
client = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
According to `developer.android.com`'s docs:
@Override
protected void onStart() {
client.connect();
super.onStart();
}
@Override
protected void onStop() {
client.disconnect();
super.onStop();
}
И onConnected
:
@Override
public void onConnected(@Nullable Bundle bundle) {
System.out.println("connected");
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
location = LocationServices.FusedLocationApi.getLastLocation(client);
if (location != null) {
System.out.println("location " + location.getLatitude());
} else {
System.out.println("location " + "empty");
}
}
Итак, когда мой GPS включен, я вижу координаты в журналах, но когда я пытаюсь получить его через Интернет (3g или Wi-Fi не имеет значения), мой Location
- null
.
Что я пропустил? Может, я ошибаюсь?
P.S. Попытка сделать то же самое с помощью LocationManager
дала тот же результат.
Полностью для работы в сети может потребоваться работающая SIM-карта. Некоторые старые обсуждения об этом [здесь] (http://stackoverflow.com/questions/8755226/android-network-provider-sim-needed/13526071) и [здесь] (http://stackoverflow.com/questions/ 36018740/locationmanager-getlastknownlocationlocationmanager-сети провайдера всегда-ре/36035467). –
@MarkusKauppinen Я не понимаю, как это может мне помочь? –
Вы отключили GPS, вероятно, нет базовых станций Wi-Fi с известным местоположением, единственный способ определить местоположение телефона - это связь с башнями сотовых. Без SIM-карты он, возможно, не сможет или не желает общаться с башнями сотовых телефонов, следовательно, нет места. Похоже, что по крайней мере устройства Samsung требуют SIM-карты, как было заключено во второй ссылке. Существуют также методы проверки необходимости подключения к SIM/сети [как указано в документации] (https://developer.android.com/reference/android/location/LocationProvider.html?hl=ru#requiresCell()). –