2016-05-26 1 views
0

Я пытаюсь получить координаты пользователя, используя Интернет (но без 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 дала тот же результат.

+0

Полностью для работы в сети может потребоваться работающая SIM-карта. Некоторые старые обсуждения об этом [здесь] (http://stackoverflow.com/questions/8755226/android-network-provider-sim-needed/13526071) и [здесь] (http://stackoverflow.com/questions/ 36018740/locationmanager-getlastknownlocationlocationmanager-сети провайдера всегда-ре/36035467). –

+0

@MarkusKauppinen Я не понимаю, как это может мне помочь? –

+0

Вы отключили GPS, вероятно, нет базовых станций Wi-Fi с известным местоположением, единственный способ определить местоположение телефона - это связь с башнями сотовых. Без SIM-карты он, возможно, не сможет или не желает общаться с башнями сотовых телефонов, следовательно, нет места. Похоже, что по крайней мере устройства Samsung требуют SIM-карты, как было заключено во второй ссылке. Существуют также методы проверки необходимости подключения к SIM/сети [как указано в документации] (https://developer.android.com/reference/android/location/LocationProvider.html?hl=ru#requiresCell()). –

ответ

1

Попробуйте как этот

Сначала определим LocationRequest объект как этот

LocationRequest mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(INTERVAL); 
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

Затем внутри onConnected() добавить этот

LocationServices.FusedLocationApi.requestLocationUpdates(
     mGoogleApiClient, mLocationRequest, this); 

Затем переопределить метод

@Override 
public void onLocationChanged(Location location) { 
    //Here you can use location.getLatitude() etc 
} 
onLocationChanged()
+0

То же самое. Я могу видеть координаты только при включенном GPS. –

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