2016-06-29 9 views
0

ich überprüfen, ob der Benutzer die Ortungsdienste deaktiviert ich dies tun wie so:Cordova warten, bis der Benutzer gab premission Ortungsdienste nutzen

cordova.plugins.diagnostic.isLocationEnabled(function(enabled) { 
      if (enabled === false) { 
       $state.go("errorTwo"); 
      } 
     }, function(error) { 
      alert("The following error occurred: " + error); 
     }); 
     } 

Aber das Problem ist, dass, wenn der Benutzer die App startet die Beim ersten Mal wird der Fehler bereits ausgeführt. Die Funktion sollte warten, bis der Benutzer die Nutzung der Ortungsdienste genehmigt hat. Wie kann ich das machen? Jede Hilfe sehr geschätzt!

Antwort

2

Die documentation states für isLocationEnabled():

Gibt true zurück, wenn das Gerät für Standorteinstellung aktiviert ist. Auf Android-Geräten wird True zurückgegeben, wenn der Standortmodus aktiviert ist. Auf iOS-Geräten wird True zurückgegeben, wenn die Standortdienste aktiviert sind.

d. H. Dies prüft nur, ob die Geräteeinstellung aktiviert ist. entweder

Sie können jedoch isLocationAvailable()

auf iOS und Windows 10 Handys verwenden, um dies wahr, wenn sowohl die Geräteeinstellung aktiviert ist und die Anwendung ist autorisiert Ort zu verwenden. Wenn der Standort aktiviert ist, handelt es sich bei den zurückgegebenen Standorten um eine Mischung aus GPS-Hardware, Netzwerktriangulation und Wifi-Netzwerk-IDs. Bei Android wird True zurückgegeben, wenn der Standortmodus aktiviert ist und ein beliebiger Modus ausgewählt ist (z. B. Batteriesparen, Nur Gerät, Hohe Genauigkeit) UND wenn die App den Standort verwenden darf. Wenn Standort aktiviert ist, sind die Standorte zurück abhängig von der Lage Modus

Dies überprüft „wenn sowohl die Geräteeinstellung aktiviert ist und die Anwendung zugelassen Standort verwenden“:

cordova.plugins.diagnostic.isLocationAvailable(
    function(enabled) { 
     if (enabled === false) { 
      $state.go("errorTwo"); 
     }, 
    }, function(error) { 
     alert("The following error occurred: " + error); 
    } 
}); 

Oder Sie kann isLocationAuthorized() nennen, wenn die App Standort zu verwenden, um zu prüfen autorisiert, bevor die Geräteeinstellung Überprüfung:

cordova.plugins.diagnostic.isLocationAuthorized(function(authorized){ 
    console.log("Location is " + (authorized ? "authorized" : "unauthorized")); 
    if(authorized){ 
     cordova.plugins.diagnostic.isLocationEnabled(
      function(enabled) { 
       if (enabled === false) { 
        $state.go("errorTwo"); 
       }, 
      }, function(error) { 
       alert("The following error occurred: " + error); 
      } 
     }); 
    } 
}, function(error){ 
    console.error("The following error occurred: "+error); 
}); 

zu „warten“, bis die App um Erlaubnis, bevor checkin zu verwenden Standort hat g, müssen Sie die Kontrolle über die Anfrage für Standort Autorisierung:

function checkLocationSetting(){ 
    cordova.plugins.diagnostic.isLocationEnabled(
     function(enabled) { 
      if (enabled === false) { 
       $state.go("errorTwo"); 
      }, 
     }, function(error) { 
      alert("The following error occurred: " + error); 
     } 
    }); 
} 

cordova.plugins.diagnostic.isLocationAuthorized(function(authorized){ 
    console.log("Location is " + (authorized ? "authorized" : "unauthorized")); 
    if(authorized){ 
     checkLocationSetting(); 
    }else{ 
     cordova.plugins.diagnostic.requestLocationAuthorization(function(status){ 
      if(status == cordova.plugins.diagnostic.permissionStatus.GRANTED){ 
       checkLocationSetting(); 
      }else{ 
       console.warn("Permission denied to use location"); 
      } 
     }, function(error){ 
      console.error(error); 
     });   
    } 
}, function(error){ 
    console.error("The following error occurred: "+error); 
}); 
+0

Vielen Dank !! – olivier

0

Sie müssen feststellen, ob dies der erste Lauf Ihrer Anwendung ist. Um dies zu tun, können Sie diesen Code hinzufügen und an Ihre Bedürfnisse anpassen.

// Service

.factory('Application', function ($window) { 
    return { 
     setInitialRun = function (initial) { 
      $window.localStorage["initialRun"] = (initial ? "true" : "false"); 
     }, 
     isInitialRun = function() { 
     var value = $window.localStorage["initialRun"] || "true"; 
     return value == "true"; 
     } 
    }; 
}); 

in Ihrem app.js

.run(function ($ionicPlatform, $state, Application) { 
    var state = "mainPage"; // whatever, the main page of your app 

    if (Application.isInitialRun()) { 
      Application.setInitialRun(false); 
      state = "intro"; 
    } 

    $state.go(state); 
});