在Android手机上安装apk时无法找到用户位置

时间:2015-08-08 19:02:48

标签: android angularjs ionic-framework ngcordova google-geolocation

我创建了一个离子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>

触发指令并找到lat和long用户。

在浏览器上进行测试时,它可以完美运行,但不适用于移动设备。

enter image description here

1 个答案:

答案 0 :(得分: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);
      });
  }

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