钛合金地理定位 getCurrentPosition 出现错误

3

我正在开发一款带有地理位置服务的应用程序,在iOS上没有问题,但是当我尝试在Android上测试时,会出现位置错误。

[ERROR] :  GeolocationModule: (main) [39266,89619] Unable to get current position, location is null

我不知道发生了什么,因为我有其他应用程序使用几乎相同的代码运行良好。

非常感谢您的帮助。

这是我的代码.

这是我的Xml.

这是预览.

这是下一个预览.

我正在使用SDK 7.0.2GA 提前致谢。

::编辑::

我根据建议对代码进行了一些更改。 现在应用程序卡在“location”事件中,并一直停留在那里。

感谢您的帮助。

function SolicitarServicio( win, idservicio, datos, datosCompletos ){ 
       if(Titanium.Geolocation.hasLocationPermissions(      Titanium.Geolocation.AUTHORIZATION_WHEN_IN_USE)) { 
          IniciarSolicitudDeServicios( win, idservicio, datos, datosCompletos     ); 
       }   
       else{
                 Ti.Geolocation.requestLocationPermissions(Ti.Geolocation.AUTHORIZATION_WHEN_IN_USE, function(e) {
               if(!e.success){
                  Ti.API.info("*** No premissions: " + e.error );
                  Utiles.Alerta(L("error_permisos_geolocalizacion"));
                  return false;
               }
               else{
                  IniciarSolicitudDeServicios( win, idservicio, datos,     datosCompletos ); 
               }

         });  
       }
       function IniciarSolicitudDeServicios( win, idservicio, datos, datosCompletos ) {
           if( params.isAndroid ){            
               var gpsProvider = Ti.Geolocation.Android.createLocationProvider({
               name: Ti.Geolocation.PROVIDER_GPS,
               });
               Ti.Geolocation.Android.addLocationProvider(gpsProvider);                      
           }        
           preloader.show(win);
           // The app stucks here, the if( e.success ) never happend
           Titanium.Geolocation.addEventListener("location",function(e){   
               if(e.success){    
                  preloader.hide(win);      
                  var latitud  = e.coords.latitude;
                  var longitud = e.coords.longitude;
                  Ti.API.info("*** Now get the coords and show te window");
                  var Button = require("src/common/Button");   
                  var WindowTotalBeige = require("src/common/ventanaTotal");   
                  var winServicio = new WindowTotalBeige("S", "G U A P P U R A" );
                  var vistaAgenda = require("src/vistas/solicitarServicio");
                  vistaAgenda.SolicitarServicio( winServicio, idservicio, datos, latitud, longitud, datosCompletos );    
                  winServicio.open();    
               }                  
               else{
                  preloader.hide(win);      
                  Utiles.Alerta( "ERROR: " +e.code + " " + e.error );
               }                                                            
           }); 
       }        
}

问题已解决! 将SDK更新至7.1.0 RC版本 无代码更改。


请在stackoverflow上使用事件监听器展示您的更新代码,不要链接到图片! - Rene Pot
我无能为力解决这个问题。 - Juan Carlos Salinas Ojeda
2个回答

2

GetCurrentLocation仅返回位置的缓存结果。您需要使用事件监听器监视位置。


你好 Rene,你的意思是 Titanium.Geolocation.addEventListener('location',function(){ ...... }); 吗? - Juan Carlos Salinas Ojeda
在Android中,requestLocationPermissions的回调函数会在成功时被调用吗? - Mitul Bhalia
嗨@MitulBhalia,是在回调函数中...我刚刚使用7.1.0RC编译,问题消失了,没有代码更改..我应该回答自己的问题吗? - Juan Carlos Salinas Ojeda
@JuanCarlosSalinasOjeda 好的,谢谢,但我正在使用6.0.2,因为我需要使用它来支持一些旧模块。如果您没有在代码中进行任何更改,则可以更新您的问题以显示您已通过7.1.0解决了该问题。 - Mitul Bhalia

0

我在使用Ti SDK 7.5.0 GA的Motorla G4 Plus设备时也遇到了同样的问题。但是当咨询Appc团队时,他们告知GPS位置获取与设备硬件有关。根据Appc支持,"如果您在室内测试,则可能需要走出室外才能锁定GPS卫星。某些GPS硬件比其他硬件更好。有时连接时间也可能比其他硬件长。请注意,您代码的首选提供程序是GPS。这意味着设备在等待GPS锁定时不会“回退”到从“WIFI”或“蜂窝提供商”获取位置。这不是软件问题,我们担心您遇到了硬件/物理限制。"但是我在室内使用三星智能手机仍然可以获取位置。

我已经验证了这一点,走出建筑物后,我成功地使用"Titanium.Geolocation.getCurrentPosition(function(e))"获取了位置,而在室内则失败了。


还要包括 ti.playservices,以解锁更好的 GPS 跟踪功能,使用文档中提到的 FusedLocationProvider https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Geolocation - Rene Pot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接