带有地理位置的Phonegap android谷歌地图不起作用

Posted

技术标签:

【中文标题】带有地理位置的Phonegap android谷歌地图不起作用【英文标题】:Phonegap android google map with geolocation not working 【发布时间】:2013-11-08 11:41:56 【问题描述】:

我正在使用 jquery mobile 开发一个 phonegap 应用程序。我没有得到当前位置。在设备上准备好 onSucess 或 onError 功能不会被触发。我想只有我没有得到位置。这是我的代码。

function onDeviceReady() 
          var options =  frequency: 3000 ;
          watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);              
    function  onSuccess(position)
       var minZoomLevel = 6;
       map = new google.maps.Map(document.getElementById('map_canvas'), 
                  zoom: minZoomLevel;
           center: new google.maps.LatLng(position.coords.latitude,position.coords.longitude),
           mapTypeId: google.maps.MapTypeId.ROADMAP
       );

        var marker = new google.maps.Marker(
         position: new google.maps.LatLng(position.coords.latitude,position.coords.longitude),
         map: map,
        );  
     
    function onError() 
        alert("Sorry,we cann't find your location");
    

【问题讨论】:

我也遇到了同样的问题,你的问题解决了吗? 【参考方案1】:

我正在开发的一些应用程序遇到同样的问题。此问题/解决方案是某些最新版本的 phonegap 上的 android 设备所特有的。 我现在不记得我在哪里找到了它,但它对我有用:

不指定 onError 回调,将调用包装在 try catch 中并使用它来处理 onError 场景

try
    navigator.geolocation.getCurrentPosition(function (position) 
       // If the position can be found send the current location to order the deals
       doSomething(position.coords.longitude, position.coords.latitude);
    );

catch(err) doSomethingWithoutCoordinates(); 

似乎当你给 phonegap 一个错误选项时,它会在没有尝试成功的情况下接受它。

免责声明:我不能肯定会调用 catch,这对我有用,并且总是给我一个坐标值,所以你可能想在放这个之前彻底测试正在生产中。

【讨论】:

【参考方案2】:

请试试这个

var options =   maximumAge: 3000, timeout: 3000, enableHighAccuracy: true ;
navigator.geolocation.getCurrentPosition(success, navFail,options);

如果您使用的是 android,则必须使用“enableHighAccuracy: true”

谢谢

【讨论】:

【参考方案3】:
**Phonegap android google map with geolocation** 

**First add file in html page**
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=true"></script>   

Add in javascript 

$(document).ready(function()
navigator.geolocation.getCurrentPosition(onSuccess, onError);          
 );

function onSuccess(position) 
lat = position.coords.latitude;
lng = position.coords.longitude;

    var secheltLoc = new google.maps.LatLng(lat, lng);

var myMapOptions = 
     zoom: 16
    ,center: secheltLoc
    ,mapTypeId: google.maps.MapTypeId.HYBRID
;
var theMap = new google.maps.Map(document.getElementById("map_canvas"), myMapOptions);
var image = "img/map_pin.png"
var marker = new google.maps.Marker(
    map: theMap,
    draggable: false,
    position: new google.maps.LatLng(lat, lng),
    visible: true,
    icon: image,
    title: Title // Title
);

var infowindow = new google.maps.InfoWindow(
    content: contentString
);
infowindow.open(theMap,marker); 
google.maps.event.addListener(marker, "click", function (e) 
    infowindow.open(theMap,marker);     
);



 /** onError CALLBACK RECEIVES A POSITIONERROR OBJECT **/
 function onError(error)  
   

switch(error.code)  
  
    case error.PERMISSION_DENIED: alert(MSG_PERMISSION_DENIED);  
    break;  

    case error.POSITION_UNAVAILABLE: alert(MSG_POSITION_UNAVAILABLE);  
    break;  

    case error.TIMEOUT: alert(MSG_TIMEOUT);  
    break;  

    default: 
        alert(MSG_UNKNOWN);  
    break;  
 

  

【讨论】:

我们已经尝试过.. 但它不起作用... 昨天是任何谷歌安卓问题。因为相同的代码在 ios 中运行良好.... 在设备或模拟器中检查 GPS 服务开启或关闭【参考方案4】:

好的,这对我有用:

    确保您的设备或模拟器已启用 GPS。

    确保您安装了地理定位插件(运行phonegap local plugin add org.apache.cordova.geolocation

    添加超时并设置 enableHighAccuracy:

    navigator.geolocation.getCurrentPosition(onSuccess, onError, timeout: 10000, enableHighAccuracy: true);
    

    在某些模拟器中,您需要将 enableHighAccuracy 设置为 false,所以如果仍然不起作用,请尝试。

    如果您使用的是 Android 模拟器,它不会读取 GPS 值,因此我们需要通过命令行发送它们。我们需要在模拟器运行的端口中启动一个telnet会话(你可以在模拟器窗口标题中查看端口,开头的数字,在我的例子中是5554):

    telnet localhost 5554
    

然后运行命令

    geo fix -122.4 37.78

如果您关闭应用程序需要重新发送地理位置,所以如果它不起作用,只需在打开应用程序后,在超时事件触发之前运行geo fix 命令即可。

【讨论】:

【参考方案5】:

请像这样使用(确保您的设备位置设置为ON);

navigator.geolocation.getCurrentPosition(onSuccess,onError,enableHighAccuracy:true);

当我这样使用时,它可以在 IOS 上运行,但不能在 Android 设备上运行;

 maximumAge: 3000, timeout: 3000, enableHighAccuracy: true 

【讨论】:

以上是关于带有地理位置的Phonegap android谷歌地图不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android 上带有 Phonegap 的缓存清单的大小限制

谷歌地图文字很小

有没有办法为通过phonegap创建的android应用程序生成谷歌分析

Phonegap Android(在安卓高清手机上不显示谷歌广告)

Phonegap/Cordova 地理定位提醒特定位置附近有啥

Phonegap 应用程序无法在某些 Android 设备中滚动