2014-10-10 109 views
0

我正在开发一个android应用程序(使用Phonegap构建),它需要显示用户的当前位置并在Google地图上加载KMZ文件(使用多行)使用谷歌地图api)。Android 4.2.2不会为我的应用程序加载谷歌地图

我的应用程序将地图加载到特定的缩放级别(11),地图根据用户当前位置居中(减少数据消耗)。我注意到,对于Android操作系统4.2.2地图根本没有加载,消息显示“访问被拒绝到您当前的位置”。

另一方面地图加载正确的android操作系统4.1.2,4.3,4.4(没有得到任何消息)。

这是Android 4.2.2的安全问题吗? 或者它是与我用来构建APK的Phonegap有关的错误?
我该如何解决这个问题?移动设备需要做什么配置?

谢谢

+0

您可以分享您的代码如何调用Google API? – AAhad 2014-10-10 12:18:50

+0

src =“https://maps.googleapis.com/maps/api/js?libraries=geometry&sensor=false&language=el&key= < MY API KEY> – Thanos 2014-10-10 12:50:37

+0

谢谢,我想看看你正在调用地图和可能的JS代码的HTML代码片段 – AAhad 2014-10-10 13:15:40

回答

0

它适用于Android 4.2.2或任何其他支持的版本。您的代码设置可能存在错误。

我刚刚通过创建示例应用程序进行了重新确认。

步骤:

(1)包括谷歌API密钥和地图JS的HTML标题部分链接

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="format-detection" content="telephone=no" /> 
     <meta name="msapplication-tap-highlight" content="no" /> 
     <meta name="viewport" content="width=device-width, height=device-height" /> 
     <link rel="stylesheet" type="text/css" href="css/index.css" /> 
     <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY_VALUE_&sensor=true"></script> 
     <title>Hello World</title> 
    </head> 
    <body> 
      <b>Road View</b> 
      <div id="map-canvas" style="width: 100%; height: 200px"></div> 
      <b>Street View</b>   
      <div id="pano" style="width: 100%; height: 200px;"></div> 
      <b>Live Traffic Update View</b> 
      <div id="traffic" style="width: 100%; height: 200px;"></div> 

     <script type="text/javascript" src="cordova.js"></script> 
     <script type="text/javascript" src="js/index.js"></script> 
    </body> 
</html> 

(2)在index.js文件声明以下函数来渲染地图

var app = { 
     initialize: function() { 
      this.bindEvents(); 
     }, 
     bindEvents: function() { 
      document.addEventListener('deviceready', this.onDeviceReady, false); 
     }, 
     onDeviceReady: function() { 
      app.receivedEvent('deviceready'); 
      app.renderMap(); 
     }, 
     receivedEvent: function(id) { 
     }, 
     renderMap: function() { 
      // --- Road View 
      var fenway = new google.maps.LatLng(42.345573, -71.098326); 
      var mapOptions = { 
       center: fenway, zoom: 11 
      }; 
      var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 

      // ---- Street View 
      var panoramaOptions = { 
       position: fenway, 
       pov: { heading: 34, pitch: 10 } 
      }; 
      var panorama = new google.maps.StreetViewPanorama(document.getElementById('pano'), panoramaOptions); 
      map.setStreetView(panorama); 

      // ---- Live Traffic View 
      var myLatlng = new google.maps.LatLng(34.04924594193164, -118.24104309082031); 
      var mapOptions = { 
       zoom: 13, 
       center: myLatlng 
      } 
      var map = new google.maps.Map(document.getElementById('traffic'), mapOptions); 
      var trafficLayer = new google.maps.TrafficLayer(); 
      trafficLayer.setMap(map); 
     } 
    }; 

    app.initialize(); 

(3)在AndroidManifest.xml文件中添加权限。

(4)设备上设置您的项目API级别到您想要的版本,例如4.2.2 (5)运行应用程序,它应该表现出三种不同类型的地图视图的(路街和实时路况)

enter image description here

enter image description here

+0

不知何故,它不显示结果窗口中的AndroidManifest.xml权限:( <使用权限android:name =“android.permission。ACCESS_COARSE_LOCATION“/> <使用权限android:name =”android.permission.ACCESS_FINE_LOCATION“/> <使用权限android:name =”android.permission.ACCESS_LOCATION_EXTRA_COMMANDS“/> <使用权限android:name =” android.permission.INTERNET“/> – AAhad 2014-10-10 19:05:09

0

这是JS文件的代码,我用于在地图上加载KML文件,获取当前位置,显示标记:

'use strict'; 

angular.module('ehunter.controllers', []). 
    controller('RegionListCtrl', ['$scope', '$http', '$window', 
     function($scope, $http, $window) { 
      $http.get('regions.json').success(function(data) { 
       $scope.regions = data; 
      }); 
      $scope.openBrowser = function(url){ 
      $window.open(url, "_blank", "location=yes"); 

     } 
    }]) 
    .controller('RegionViewCtrl', ['$scope', '$routeParams', 
     function($scope, $routeParams) { 
      $scope.region = angular.fromJson($routeParams.r); 
      var map; 
      var src = "MY_SERVER"+ $scope.region.File; 

      initialize(); 


      function initialize() { 
       map = new google.maps.Map(document.getElementById('map_canvas'), { 
        zoom: 11, 
        mapTypeId: google.maps.MapTypeId.TERRAIN 
       }); 
       loadKmlLayer(src, map); 

      } 

      function loadKmlLayer(src, map) { 
       var kmlLayer = new google.maps.KmlLayer(src, { 
        suppressInfoWindows: true, 
        preserveViewport: true, 
        map: map 
       }); 

      } 

      getLocation(); 

      function getLocation(){ 
        if (navigator.geolocation) { 
        navigator.geolocation.getCurrentPosition(function displayPosition(position) { 

          var marker = new google.maps.Marker({ 
          position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude), 
           map: map 
          }); 
         marker.setVisible(true); 
         marker.setMap(map); 
         map.setCenter(marker.position); 

         }); 

    }} 
    }]) 
相关问题