2014-08-27 4 views
0

Я разрабатываю кросс-платформенные приложения. Я могу запросить доступ к местоположению, используя API-интерфейс GAP. Если пользователь щелкает все в порядке, то я могу получить широту и долготу с помощью PhoneGap API и отправить его на сервер.Запросить доступ к местоположению после первоначального отказа в приложениях PhoneGap

Однако у меня возникают проблемы, если пользователь сначала нажимает «Не разрешать». После этого, если он попытается обновить страницу, я хочу, чтобы устройство снова отображало всплывающее окно для запроса доступа к местоположению.

Как мы это делаем в приложениях с одной страницей?

var loadPanelMessage = ko.observable("Sipping..."), 
    loadPanelVisible = ko.observable(false), 
    lat = ko.observable(''), 
    lon = ko.observable(''); 
navigator.geolocation.getCurrentPosition(onSuccess, onError); 

    var onSuccess = function (position) { 
    lat(position.coords.latitude); 
    lon(position.coords.longitude); 
    timestamp(position.timestamp); 
}; 

function onError(error) { 
    alert('code: ' + error.code + '\n' + 
      'message: ' + error.message + '\n'); 
//How should I handle the error, so that it asks for Geolocation again? 
} 

ответ

2

Вы не можете reshow, что всплывающее окно, оно показано прошивкой и только пользователь клике «Не разрешать» Вы не можете заставить этого всплывающего окна. Все, что вы можете сделать, это сообщить пользователю о ситуации и настроить пользователя на настройки iOS, чтобы включить службы определения местоположения для вашего приложения.

Здесь приятно читать о проблеме: https://medium.com/on-startups/96fa4eb54f2c

0

На основе Cordova плагинов здесь org.apache.cordova.geolocation

Все, что вам нужно сделать, это watchPosition проверить PositionError, а также использовать cordova-plugin-dialogs для собственного использования

navigator.geolocation.watchPosition((function(_this) { 
    return function(position) { 
    // Do something here 
}; 
})(this), function(error) { 
    var errorButton, errorMsg, errorTitle; 
    errorTitle = "Location Services"; 
    errorButton = "Ok"; 
    if (error.code === 1) { 
    errorMsg = "\"AppName\" needs access to your location. Please turn on Location Services in your device settings."; 
    } 
    if (error.code === 2) { 
    errorMsg = "This device is unable to retrieve a position. Make sure you are connected to a network"; 
    } 
    if (error.code === 3) { 
    errorMsg = "This device is unable to retrieve a position. Make sure you have Location Services enabled for \"AppName\""; 
    } 
    if (error.code === 1 || error.code === 2 || error.code === 3) { 
    return navigator.notification.alert(errorMsg, errorDismissed(), errorTitle, errorButton); 
    } 
}, { 
    enableHighAccuracy: true, 
    maximumAge: 20000, 
    timeout: 10000 
}); 
+0

Забыл (а), что вы должны остановить часы при ошибке или выполнить som более логично отображать сообщение об ошибке каждые несколько минут, так как вы не хотите спамить пользователя сообщениями – AlexLopezIT

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