0

我创建了一个 ionic angularjs ngCordova 移动应用程序,其中我使用了 ngCorodova 地理定位插件来获取用户位置。当我在浏览器上测试它时,它工作正常。但是当我 [android-app.apk] 安装在移动应用上时[显然是在检查“未知来源”选项后];我无法获得位置。我在应用程序设置中看到,有权限访问移动设备上的位置。此外,当事件被触发时,它会在顶部栏显示 GPS 符号,但它会消失。

有人可以帮我吗?

以下是我的 controller.js 中的位置代码

 .directive('reverseGeocode', function ($cordovaGeolocation, $rootScope) {
    return {
        restrict: 'E',
        template: '<div></div>',
        link: function (scope, element, attrs) {
            var geocoder = new google.maps.Geocoder();

            var posOptions = {timeout: 10000, enableHighAccuracy: true};
              $cordovaGeolocation
                .getCurrentPosition(posOptions)
                .then(function (position) {
                  var lati  = position.coords.latitude;
                  var longi = position.coords.longitude;



                 // console.log(angular.toJson($rootScope.lati) + " -  " );

                    var request = new XMLHttpRequest();

                    var method = 'GET';
                    //var url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+long+'&sensor=true';
                    var async = true;
            //alert(url);
                    //request.open(method, url, async);
                    //alert(angular.toJson(request.open(method, url, async)));
                      //  var data = JSON.stringify(request.responseText);            
                    //  alert(JSON.stringify(request.responseText));

            var latlng = new google.maps.LatLng(lati, longi);

            geocoder.geocode({ 'latLng': latlng }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    if (results[1]) {
                    //alert(results[1].address_components[1].long_name);
                    $rootScope.colony = results[1].address_components[1].long_name;
                    //alert(results[1].address_components[1].long_name);
                    //alert(results[1].address_components[1].long_name);
                    //alert(angular.toJson(results[1].address_components[1].long_name));
                        element.text(results[1].formatted_address);
                    } else {
                        element.text('Location not found');
                    }
                } else {
                    element.text('Geocoder failed due to: ' + status);
                }
            });                       

                }, function(err) {
                  // error
                });


                var watchOptions = {
frequency : 1000,
timeout : 3000,
enableHighAccuracy: false // may cause errors if true
  };

  var watch = $cordovaGeolocation.watchPosition(watchOptions);
   watch.then(
   null,
   function(err) {
     // error
   },
    function(position) {
     var lat  = position.coords.latitude
      alert("abc >>" + lat);
     var long = position.coords.longitude
    });


    watch.clearWatch();
  // OR
   $cordovaGeolocation.clearWatch(watch)
   .then(function(result) {
     // success
     }, function (error) {
     // error
    });


        },
         replace: true
    }
})

在 html 文件中,我将其用作:

<h6>
    User Colony: {{ colony }}
    <reverse-geocode lat={{lati}}  lng={{longi}}></reverse-geocode>
  </h6>  
  <a href="#" ng-click="showStores(colony)" class="button button-block button-positive">
      Browse Store
</a>

这会触发指令并查找用户的经纬度。

在浏览器上测试时,它可以完美运行,但不能在移动设备本身上运行。

在此处输入图像描述

4

1 回答 1

0

在 android 中,使用 GPS 用户非常复杂,请记住,我们获得的地理位置通常来自浏览器,而不是 GPS 本身,这在设备中变化很大。为了您的帮助,我建议安装cordova.plugins.diagnostic

function onDeviceReady() {
      cordova.plugins.diagnostic.isLocationAuthorized(function(enabled){
        //alert("gps es : " + (enabled ? "enabled" : "disabled"));
      }, function(error){
          //alert("error: "+error);
      });
      cordova.plugins.diagnostic.isLocationEnabled(function(enabled){
          if(!enabled){
             alert("gps not actived");
          }else{
            navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy: true,timeout: 5000,maximumAge: 5000});
          }
      }, function(error){
          console.log("The following error occurred: "+error);
      });
  }

总是试图查看我是否可以获得纬度和经度,如果未激活或无法获得,它会向用户发送消息。我希望它对你有帮助。

于 2015-08-10T13:51:35.947 回答