0

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

有人可以帮我吗?

下面是位置代码在我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> 

这triggeres指令,并找到纬度和长期的用户。

在浏览器上测试时,它可以很好地工作,但不适用于移动设备本身。

enter image description here

回答

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); 
     }); 
    } 

总是想看看我是否能得到一个纬度和经度,如果未激活或没有,你可以得到,它发送一个消息给用户。我希望它能帮助你。

相关问题