Intereting Posts
Android Proguard java.io.IOException: невозможно прочитать [proguard.ClassPathEntry Ошибка: выполнение выполнено для задачи ': ProjectName: mergeDebugResources'. > Crunching Cruncher * некоторые файлы * сбой, см. Журналы Android, Расширяемое представление списка не реагирует на щелчок !!! Он не расширяется ExpandableListView расширяется только на определенной кнопке? Почему существуют две папки Cordova www? Есть ли способ иметь один и только один экземпляр каждого вида деятельности? Лучшая Java Datastructure для хранения ключевой пары значений Android: как программно открыть мягкую клавиатуру в режиме просмотра Emoji Android UnknownHostException: есть ли способ установить тайм-аут? Эмуляция Nexus 7 HttpURLConnection отлично работает в Android 2.x, но НЕ в 4.1: не обнаружены проблемы аутентификации Как использовать PackageManager.addPreferredActivity ()? Проблема с использованием org.apache.commons.net.telnet. * С android Не удалось найти цель с хеш-строкой 'android-22' Android; Проверьте, существует ли файл без создания нового

Поставщик плавного местоположения не получает местоположение, если GPS не включен

Поэтому я внедрил новый API провайдера Fused Location Provider, чтобы получить местоположение пользователя, но по какой-то причине я не могу получить какое-либо местоположение, если GPS не включен. Не всегда, у пользователей будет свой GPS, и я бы не стал просить их поворачивать свой GPS каждый раз при загрузке приложения. Как я могу сказать API, чтобы дать мне местоположение с любым поставщиком, который у него есть?

Вот мой код:

public class FusedLocationService implements LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { public interface OnLocationChangedListener { public void OnLocationChanged(Location location); } private final String TAG = "SE8611"; private boolean mRequestingLocationUpdates = true; private OnLocationChangedListener mCallBack; Service locationService; private LocationRequest locationRequest; private GoogleApiClient googleApiClient; private Location mCurrentLocation; private FusedLocationProviderApi fusedLocationProviderApi = LocationServices.FusedLocationApi; public FusedLocationService(Service locationService, final long INTERVAL, final long FASTEST_INTERVAL) { Logger.log(TAG, "FusedLocationService called"); this.mCallBack = (OnLocationChangedListener)locationService; locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(INTERVAL); locationRequest.setFastestInterval(FASTEST_INTERVAL); this.locationService = locationService; googleApiClient = new GoogleApiClient.Builder(locationService) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); if (googleApiClient != null) { googleApiClient.connect(); } } @Override public void onConnected(Bundle connectionHint) { if(mRequestingLocationUpdates) { startLocationUpdates(); }else{ Logger.log(TAG, "Location updates are already running."); } } protected void startLocationUpdates() { this.fusedLocationProviderApi.requestLocationUpdates( googleApiClient, locationRequest, this); this.mRequestingLocationUpdates = false; } @Override public void onLocationChanged(Location mCurrentLocation) { Logger.log(TAG, "onLocationChanged called"); this.mCurrentLocation = mCurrentLocation; this.mCallBack.OnLocationChanged(this.mCurrentLocation); } public void startLocationUpdatesAfterResume(){ if (googleApiClient.isConnected() && !mRequestingLocationUpdates) { Logger.log(TAG, "startLocationUpdatesAfterResume called"); this.startLocationUpdates(); } } public void stopLocationUpdates() { Logger.log(TAG, "stopping Location Updates"); LocationServices.FusedLocationApi.removeLocationUpdates( googleApiClient, this); } public Location getLocation() { return this.mCurrentLocation; } @Override public void onConnectionSuspended(int i) { this.mRequestingLocationUpdates = true; } @Override public void onConnectionFailed(ConnectionResult connectionResult) { this.mRequestingLocationUpdates = true; } } 

Solutions Collecting From Web of "Поставщик плавного местоположения не получает местоположение, если GPS не включен"

У меня была такая же проблема, как и вы, что совсем не проблема. Android имел кнопку GPS, которая позволяла вам контролировать ее напрямую, но они заменили ее кнопкой «Расположение», которая работает по-разному. Чтобы получить какой-либо тип местоположения, вы должны включить его. Как и вы, я думал, что кнопка «Местоположение» включена и выключается только с GPS, но это не так. Вы можете управлять GPS, изменив режим местоположения: 1. Высокая точность (GPS, Wi-Fi и мобильные сети) 2. Энергосбережение (Wi-Fi и мобильные сети) 3. Только GPS

Думаю, я нашел решение проблемы.

Если вы перейдете в Настройки -> Конфиденциальность и безопасность -> Местоположение, вы заметите, что Location – это не только GPS, но и позволяет пользователю решить, какие поставщики могут быть использованы. Например, вы можете установить, что для получения любых местоположений следует использовать только WiFi и Cellular

Параметр «Отключить местоположение» отключит сразу всех провайдеров, а не только GPS.

Чтобы протестировать это приложение для пользователей только с WiFi, вы можете получить местоположение – измените настройку на «Wifi + Cellular».

Вы, кажется, используете LocationRequest.PRIORITY_HIGH_ACCURACY , который предпочитает использовать GPS выше и выше других методов. Возможно, вы захотите использовать PRIORITY_BALANCED_POWER_ACCURACY , который будет использовать WiFi и сотовые башни перед использованием GPS.

Кроме того, поскольку PRIORITY_BALANCED_POWER_ACCURACY является «грубым» уровнем точности, вы можете соответствующим образом изменить разрешение на размещение в своем манифесте.

В учебной документации содержится подробная информация о флажках приоритета, вы также можете пройти через нее.