Intereting Posts
Установите ширину и высоту изображения в ImageView Android Book for development Android In-App Billing: состояние покупки остается «купленным» после отмены заказа Android ADB: имитировать недавнее нажатие клавиши приложения Мое приложение Android Android теряет значения, хранящиеся в localStorage, когда он отключается. Кто-нибудь еще видит эту проблему? Кнопка «Действие» на панели Android не отображается Невозможно разрешить метод getActivity () Как избавиться от «Это приложение заставляет ваше устройство работать медленно» уведомление (время разработки приложения)? Что значит раздуть представление из XML-файла? Обработчик против AsyncTask Удалить уведомление при вызове addAction? Ограничить запросы API только моему мобильному приложению CardView в RecyclerView: анимация при заполнении Используйте слот для SIM-карты в качестве устройства для чтения смарт-карт в телефонах 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 является «грубым» уровнем точности, вы можете соответствующим образом изменить разрешение на размещение в своем манифесте.

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