различное поведение для текущей широты и долготы местоположения в iOS7 - IOS8

Использование xamarin для текущего местоположения currentLocation пример Я использовал Ссылка выше для получения широты и долготы текущего местоположения.
В IOS 7 перед обновлением до IOS 8 отображается широта и долгота моего текущего местоположения как на симуляторе, так и на устройстве (для меня это выглядит странно в симуляторе для получения широты и долготы текущего местоположения ).

После обновления до iOS 8 и запуска того же кода он дает

В симуляторе: (Всегда включайте приложение службы определения местоположения Wi-Fi без SIM-карты.)

Result:
latitude = 37.785834.
longitude = -122.406517.

На устройстве IPhone5c (всегда включайте приложение службы определения местоположения Wi-Fi без SIM-карты.)

Result:
latitude = 37.785834.
longitude = -122.406517.

(Но я ожидал широту и долготу моего текущего местоположения)

После обновления он не спрашивает, может ли это приложение использовать GPS «Ваше текущее местоположение». предупреждающее сообщение с вариантами ДА, НЕТ.

Как узнать широту и долготу моего текущего местоположения?


person KkMIW    schedule 20.09.2014    source источник
comment
У меня никогда не было симулятора, возвращающего какое-либо местоположение, кроме местоположения, установленного с помощью отладки или меню местоположения в симуляторе. Убедитесь, что вы не принудительно смоделировали местоположение в отладке Xcode - это применимо как к симулятору, так и к устройству.   -  person Paulw11    schedule 21.09.2014
comment
При запуске приложения на симуляторе отображается Результат: широта = 37,785834. долгота = -122,406517. При запуске на устройстве (Iphone5c) службы определения местоположения Location.IOS (имя приложения) выбрано установите флажок «Разрешить доступ к местоположению всегда» и откройте приложение. Результат: Широта: [широта] долгота: [долгота] .... Не работает, не показывает текущий широта и долгота местоположения.   -  person KkMIW    schedule 21.09.2014
comment
Я думаю, что с locationManger что-то не так. Невозможно получить широту и долготу текущего местоположения. Пожалуйста, дайте мне знать, как узнать широту и долготу текущего местоположения. используя LocationManager xamarin для IOS.   -  person KkMIW    schedule 21.09.2014
comment
Здравствуйте уважаемый, Вы разобрались с этой проблемой в симуляторе?   -  person Anurag    schedule 07.02.2018


Ответы (4)


Вам необходимо явно запросить разрешение от iOS 8.0 и новее. Шаги для этого:

  1. Обновите свой файл Info.plist. Вставьте новый ключ: ключи NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription и напишите настраиваемое сообщение, которое будет отображаться, когда ваше приложение запрашивает разрешение.

Любой из этих ключей обязательно должен быть в вашем файле plist, иначе запрос разрешения не будет отображаться! Если вы не хотите отображать настраиваемый текст объяснения в окне предупреждения, оставьте строку значения ключа пустой, но ключ все равно должен присутствовать в файле Info.plist!

  1. Прежде чем начать отслеживание, убедитесь, что вы используете iOS8, а затем отправьте RequestAlwaysAuthorization или RequestWhenInUseAuthorization из экземпляра CLLocationManager. Пример:

    var locationManager = new CLLocationManager();
    if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
        locationManager.RequestAlwaysAuthorization();
    }
    

В этом случае используйте ключ NSLocationAlwaysUsageDescription в вашем файле Info.plist. Обратите внимание, что Xamarin Studio в настоящее время не предлагает вам этот ключ автоматически из раскрывающегося списка, вам необходимо ввести / скопировать и вставить этот ключ вручную туда.

person Gabor Furedi    schedule 21.09.2014
comment
Еще две вещи, которые следует учитывать: если вы используете Xamarin.Mobile (вместо CLLLocationManager напрямую), замените шаг № 2, просто убедившись, что у вас есть последнее (после ios8) обновление для компонента Xamarin.Mobile. Существующие проекты не будут обновляться автоматически. Затем простой вызов StartListening на геолокаторе приведет к появлению подсказки. Я также обнаружил, что приложение «Карты» даже не получает пользовательские координаты, которые я установил для симулятора. Поэтому пришлось вернуть симулятор в рабочее состояние, переключив пользовательское местоположение на «Нет», а затем вернувшись в пользовательское местоположение. - person DennisWelu; 13.10.2014
comment
Не работает для меня. Я сделал все это. Я получаю то же местоположение (широта = 37,785834. Долгота = -122,406517) - person Anurag; 07.02.2018

При использовании симулятора iOS вам необходимо установить пользовательское местоположение для оборудования симулятора. Перейдите в Debug, выберите местоположение, пользовательское местоположение и затем установите предпочтительные координаты.

person Poonam    schedule 28.05.2018
comment
Я считаю, что вы правы! :) Фактически, инструктор в курсе, который я беру, даже специально говорит, что координаты штаб-квартиры Apple являются ожидаемыми возвращаемыми значениями (вероятно, по умолчанию) используемого симулятора, и что это были значения, которых она ожидала. - person JasonMichael; 05.08.2019

Добавить в файл LocationManger.cs для метода LocationManager

if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
    this.locMgr.RequestAlwaysAuthorization();
}

После изменения

public LocationManager ()
{
    this.locMgr = new CLLocationManager();
    LocationUpdated += PrintLocation;
    if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
        this.locMgr.RequestAlwaysAuthorization();
    }
}

Добавить Info Plist вручную NSLocationAlwaysUsageDescription пустая строка.

Затем очистите сборку и запустите приложение. Он показывает широту и долготу моего текущего местоположения.

person KkMIW    schedule 22.09.2014

Я пробовал вышеуказанные решения, но это не сработало. Проблема в том, что когда вы нацеливаетесь на IOS> = 9.0, диспетчер местоположения меняет некоторые переменные разрешения, которые должны явно упоминаться в info.pList.

<key>NSLocationWhenInUseUsageDescription</key>
<string>Why you need Location</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Why you need Location</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>Why you need Location</string>

<key>NSLocationWhileInUsage</key>
<string>Why you need Location</string>

используйте эти четыре ключа, если хотите настроить таргетинг на все версии .. до и после 9.0.

Также обратите внимание, что эта строка означает, находится ли пользователь на переднем плане или в фоновом режиме (Apple не одобряет это, потому что у него есть потенциал конфиденциальности) см. документацию здесь

[locationManager requestAlwaysAuthorization];

тогда как это означает,

[locationManager requestWhenInUseAuthorization];

Используйте только тогда, когда приложение находится на переднем плане. см. Документацию здесь

person Najam    schedule 16.11.2017