2016-08-16 4 views
4

Итак, я пытаюсь создать приложение погоды для практики, и я столкнулся с проблемой попытки найти место. Я читал, что люди предлагают использовать getLastLocation через API с плавким расположением, проблема с этим заключается в том, что у них еще нет местоположения, зарегистрированного на устройстве, и оно имеет значение null. Я заметил использование времени эмулятора, что это происходит редко, но мне все равно нравится, когда мое приложение обрабатывает его должным образом. Один случай, когда вы можете столкнуться с этим, заключается в том, что они просто отключили GPS и обратно, или если телефон был включен. Одна вещь, которую я сделал, это то, что если getLastLocation вернется в нуль, нужно запросить обновление, но вам все равно придется ждать, пока устройство зарегистрирует обновленное местоположение, которое с помощью приложения погоды все данные основаны на вас, я все еще сталкиваюсь с той же проблемой. Я заметил, что с другими приложениями это не проблема, например, иногда мне приходится загружать Карты Google, чтобы заставить его зарегистрировать местоположение. Как Google Maps вынуждает его обновлять местоположение? Вот пример из моего метода getLocation:Как получить местоположение устройства

public void getLocation() throws SecurityException { 
    boolean gps_enabled; 
    LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    if (gps_enabled) { 

     Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
     if (location != null) { 
      startGetForecast(location); 
     } else { 
      LocationRequest request = LocationRequest.create(); 
      request.setNumUpdates(1); 
      request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
      LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, request, this); 
     } 
    } 
    else { 
     AlertDialogFragment alertDialogFragment = new AlertDialogFragment(); 
     alertDialogFragment.setErrorTexts("Location Unavailable", "Could not retrieve location information.", "Exit"); 
     alertDialogFragment.show(getSupportFragmentManager(), "Location Unavailable"); 
    } 
} 
+0

Просто обратите внимание, почему вы не используете Fuse Location Provider Api, который будет защищать вас от головных болей. –

+0

Я использую плавленое местоположение api? Моя проблема заключается в том, что нет последнего местоположения с использованием плавного расположения api. – jBob

+0

Если я не ошибаюсь, последнее местоположение может быть выбрано из любого провайдера местоположения, например, gps, wifi или вашей телефонной сети, в вашем коде, если вы заявите, спрашиваете, включен ли gps или нет, но если вы находитесь внутри сборки и включаете gps то нет места? попробуйте отключить ваш запрос if temproray и посмотреть, есть ли у вас что-то. и убедитесь, что у вас есть покрытие сигнала телефонной сети и/или Wi-Fi. –

ответ

1

Примечание: Этот ответ может звучать как не отвечать на вопрос прямо, но после беседы (комментарии в вопросе) с OP как его код был хорошо в целом, но при условии, вокруг проблемы, этот ответ удовлетворил ОП.

К счастью, стандартная библиотека - это не единственный способ, которым Google может получить код в свои руки. В дополнение к стандартной библиотеке, Google провайдер Службы Play. Это набор общих служб, которые устанавливаются вместе с приложением Google Play Store: . Чтобы исправить эту ошибку , Google отправил службы новых мест в Play Сервисы, называемые провайдером Fused Location.

Поскольку эти библиотеки живут в другом приложении, вы должны действительно иметь это приложение . Это означает, что только приложения с установленным и обновленным устройством Play Store смогут использовать ваше приложение.

Поэтому вывод:

  1. Вам нужно протестировать приложение на устройстве, как упоминалось выше.
  2. Поскольку вы используете плавленое Местонахождение поставщика Апи, это означает, что Api будет автоматически определять последнее место из одного из следующих источников:

    1. GPS радио
    2. кормовых точек из вышек
    3. WiFi соединений
  3. Таким образом, вы можете легко удалить GPS, если условие из кода

  4. Будьте в безопасности, если вы должны использовать GPS-сигнал, вам нужно быть вне здания, лаборатории, дома или офиса.

Если вы хотите больше узнать больше в указанных ресурсах и есть много онлайн-ресурсов.

Ресурсы: Первая часть ответа, источник его от:

Android программирования: Ranch Guide Big Nerd
второе издание
глава 31 страница 552 под Google Play Services

+0

@DanielNugent Я согласен, но прочитаю комментарии, если у вас есть ввод, я буду более чем счастлив услышать от вас –

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