我正在使用地理定位服务开发应用程序,iOS没有问题,但是当我尝试在Android上测试时,会发生位置错误。
[ERROR] : GeolocationModule: (main) [39266,89619] Unable to get current position, location is null
我不知道发生了什么,因为我有其他应用程序与几乎相同的代码正常工作。
任何帮助将不胜感激。
我使用SDK 7.0.2GA提前感谢。
::编辑::
我使用建议对代码进行了一些更改。现在,应用程序停留在“位置”事件中并且卡在那里。
谢谢您的帮助
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无代码更改。
GetCurrentLocation仅返回该位置的缓存结果。您需要使用eventlistener来查看位置。
我在使用Ti SDK 7.5.0 GA的Motorla G4 plus设备中也遇到了同样的问题。但在咨询Appc团队时,他们告知GPS位置提取因设备硬件而异。根据Appc的支持,“如果你在室内进行测试,那么你可能需要走出去锁定GPS卫星。有些GPS硬件比其他硬件更好。有时连接也需要更长时间。注意您的代码的首选提供商是GPS。这意味着设备在等待GPS锁定时不会“回退”从“WIFI”或“蜂窝提供商”获取位置。这不是软件问题,我们担心你遇到了硬件/物理限制。“但我在室内也使用三星智能手机获得了这个位置。
我已经验证了这一点,通过走出大楼,我能够使用“Titanium.Geolocation.getCurrentPosition(function(e))成功获得位置”,这在我的室内失败了。