Javascript 获得激活地理定位结果的承诺

Javascript 获得激活地理定位结果的承诺,javascript,ionic-framework,ionic2,geolocation,ionic3,Javascript,Ionic Framework,Ionic2,Geolocation,Ionic3,使用此代码: if (ionic.Platform.isIOS()) { cordova.plugins.diagnostic.switchToSettings(); } else { cordova.plugins.diagnostic.switchToLocationSettings(); } 我可以打开本机设备配置来标记地理位置。但我不知道当用户打开地理定位时该怎么做,它只是执行代码,但没有从中得到答案。我想(如果可能的话)知道用户是否打开了地理定位 我怎么做 我使用的是ioni

使用此代码:

if (ionic.Platform.isIOS()) {
    cordova.plugins.diagnostic.switchToSettings();
} else {
cordova.plugins.diagnostic.switchToLocationSettings();
}
我可以打开本机设备配置来标记地理位置。但我不知道当用户打开地理定位时该怎么做,它只是执行代码,但没有从中得到答案。我想(如果可能的话)知道用户是否打开了地理定位

我怎么做


我使用的是
ionic1
,尽管我认为此解决方案的操作适用于任何版本。非常感谢。

不幸的是,当用户从设备设置打开/关闭位置时,您无法获得回调或响应,因为没有这种方式与本机设置通信

但有一个解决办法。使用

以下是完整的工作代码:

  $scope.$on("$ionicView.enter", function() {
        cordova.plugins.diagnostic.isLocationEnabled(function(enabled) {
          console.log("Location setting is " + (enabled ? "enabled" : "disabled"));

          if (!enabled) {
            var templateMsg = "Location is not enabled!\nDo you want to enable location service?"
            var confirmPopup = $ionicPopup.confirm({
              title: '<b>Location Service</b>',
              template: '<input alert-enter-key style="position: absolute; left: -9999px;">' + templateMsg.replace(/\n/g, '<br>'),
              okText: "Enable",
              okType: 'ok-button',
              cancelText: "Not now",
              cancelType: 'cancel-button'
            });

            confirmPopup.then(function(res) {
              if (res) {
                if (ionic.Platform.isIOS()) {
                  if (window.cordova && window.cordova.plugins.settings) {
                    window.cordova.plugins.settings.open("settings", function() {
                        console.log('settings opened');
                      },
                      function() {
                        console.log('failed to open settings');
                      }
                    );
                  } else {
                    console.log('openNativeSettingsTest is not active!');
                  }
                } else {
                  cordova.plugins.diagnostic.switchToLocationSettings();
                }                  }
            });
          }
        }, function(error) {
          console.error("The following error occurred: " + error);
        });
      });
$scope.$on(“$ionicView.enter”,函数(){
cordova.plugins.diagnostic.isLocationEnabled(功能已启用){
console.log(“位置设置为”+(启用?:“禁用”);
如果(!已启用){
var templateMsg=“位置未启用!\n是否要启用位置服务?”
var confirmPopup=$ionicPopup.confirm({
标题:“定位服务”,
模板:“”+templateMsg.replace(/\n/g,
), okText:“启用”, okType:“确定按钮”, 取消文本:“不是现在”, cancelType:“取消按钮” }); confirmPopup.then(函数(res){ 如果(res){ if(ionic.Platform.isIOS()){ if(window.cordova&&window.cordova.plugins.settings){ window.cordova.plugins.settings.open(“settings”,function()){ console.log(“设置已打开”); }, 函数(){ console.log('打开设置失败'); } ); }否则{ log('openNativeSettingsTest未激活!'); } }否则{ 插件。诊断。开关位置设置(); } } }); } },函数(错误){ console.error(“发生以下错误:“+错误”); }); });

注意:要在iOS上打开位置设置(设置>隐私>位置服务),但iOS 11平台中有更改,因此您无法打开设置>隐私>位置服务

非常感谢,这在安卓系统中运行良好,但在ios系统中,我不需要直接打开地理定位,可以为此做些什么?。顺便问一下,我用的是$scope而不是$scope。$on(“$ionicView.enter”=>addEventListener(“resume”)是一样的吗?@yavg我已经在iOS中更新了打开位置设置的答案。看看!我正在尝试虚拟机iphone7和iPhone8,我必须使用“cordova.plugins.diagnostic.switchToLocationSettings()”我不确定,但它总是通过else“openNativeSettingsTest未激活!”
cordova.plugins.diagnostic.switchToLocationSettings();
不支持iOS。这就是为什么我添加了
window.cordova.plugins.settings.open(“位置”
,如果设备是iOS。使用我上面添加的内容。它将100%工作。