起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13231|回复: 21

[处理中5] 求大神助我:后台定位追踪的位置不更新

  [复制链接]

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
发表于 2016-7-28 17:59:53 | 显示全部楼层 |阅读模式
前提: 打了 cordova-plugin-geolocation 插件进入APP中

问题: IOS中发现这个问题,安卓还没有测试。


描述:
     使用navigator.geolocation.getCurrentPosition()方法+ 后台运行插件,实现了后台定时采集位置,但是发现ios中定时获取的位置不更新。就是说我在A地点打开的APP然后在后台运行,15分钟采集一次经纬度并解析出地址,然后过了一会我去了B地点玩了1个小时,后来我又去C地点吃了顿饭,然后我去D地点散步了,最后回家E地点洗澡睡觉。


最后在数据库中查看到的所有上传的位置全部都是 A地点 的经纬度和地址。  

请问有没有类似的情况,原因是什么???

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
 楼主| 发表于 2016-7-29 09:34:31 | 显示全部楼层
顶下
<a href="#自我介绍"/>点点点</a>
回复

使用道具 举报

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
 楼主| 发表于 2016-7-29 11:04:02 | 显示全部楼层
大神呢?
<a href="#自我介绍"/>点点点</a>
回复

使用道具 举报

0

主题

245

帖子

515

积分

高级会员

Rank: 4

积分
515
QQ
发表于 2016-8-2 10:24:47 | 显示全部楼层

您好,您确实是多次调用了该方法吗?我们这边测试过,是会更新经纬度的啊!
回复 支持 反对

使用道具 举报

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
 楼主| 发表于 2016-8-4 15:58:06 | 显示全部楼层
九月书生 发表于 2016-8-2 10:24
您好,您确实是多次调用了该方法吗?我们这边测试过,是会更新经纬度的啊! ...

弄了个Demo
帮我看看下
<a href="#自我介绍"/>点点点</a>
回复 支持 反对

使用道具 举报

发表于 2016-8-5 10:44:45 | 显示全部楼层
这样吧!你先保证app是正常启动的状态下,您移动位置的时候,代码是不是正常运行的??可以成功定位!
如果正常的!那就说明是后台插件没起作用!然后再来单独看后台插件为什么不运行

可能是你没启动吧!参考:http://docs.wex5.com/wex5-app-question-list-2005/
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
 楼主| 发表于 2016-8-5 11:23:26 | 显示全部楼层
liangyongfei 发表于 2016-8-5 10:44
这样吧!你先保证app是正常启动的状态下,您移动位置的时候,代码是不是正常运行的??可以成功定位!
如果 ...

后台可以确定是运行了的   ios定位是否也可以使用 navigator.geolocation.getCurrentPosition()方法?
<a href="#自我介绍"/>点点点</a>
回复 支持 反对

使用道具 举报

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
 楼主| 发表于 2016-8-5 11:30:10 | 显示全部楼层
liangyongfei 发表于 2016-8-5 10:44
这样吧!你先保证app是正常启动的状态下,您移动位置的时候,代码是不是正常运行的??可以成功定位!
如果 ...

我贴下代码:


home.js的modelOnLoad事件中:
  1. define(function(require) {
  2.     var $ = require("jquery");
  3.     var justep = require("$UI/system/lib/justep");
  4.     var fluxUtil = require("$UI/fluxJsTools/fluxAppUtil");// 工具类

  5.     require("cordova!cordova-plugin-spinner-dialog");
  6.     require("cordova!de.appplant.cordova.plugin.background-mode");

  7.     Model.prototype.modelLoad = function(event) {
  8.         var time1 = "";
  9.         document.addEventListener('deviceready', function() {
  10.             /** 自动激活后台运行服务 */
  11.             cordova.plugins.backgroundMode.enable();
  12.             /** 当后台运行服务激活时执行的方法 */
  13.             cordova.plugins.backgroundMode.onactivate = function() {
  14.                 timer = setInterval(function() {
  15.                     fluxUtil.addPosition();
  16.                 }, 60*1000);
  17.             };
  18.             cordova.plugins.backgroundMode.ondeactivate = function() {
  19.                 clearInterval(timer);
  20.             };
  21.         });
  22.     };
  23.     return Model;
  24. });
复制代码

工具类(fluxAppUtil.js):
   
  1. define(function(require) {
  2.         var $ = require("jquery");
  3.         var justep = require("$UI/system/lib/justep");
  4.         require("$UI/system/lib/cordova/cordova");
  5.         require("cordova!cordova-plugin-geolocation");

  6.         var province = "";
  7.         var serParamsUrl = "";
  8.         var fluxUtil = {
  9.                 addPosition : function() {
  10.                         var province = "";// 省
  11.                         var city = "";// 市
  12.                         var section = "";// 区
  13.                         var street = "";// 街道
  14.                         var location = "";// 当前地址
  15.                         var addComp = "";
  16.                         var pPoint = "";

  17.                         navigator.geolocation.getCurrentPosition(success, error);
  18.                         function success(position) {
  19.                                 var longitude = position.coords.longitude;// 经度
  20.                                 var latitude = position.coords.latitude;// 纬度
  21.                                 var gpsPoint = new BMap.Point(longitude, latitude);

  22.                                 // 原始坐标转换为百度坐标(一定要等待地图加载完成之后才能进行)
  23.                                 var convertor = new BMap.Convertor();
  24.                                 var pointArr = [];
  25.                                 pointArr.push(gpsPoint);
  26.                                 convertor.translate(pointArr, 1, 5, translateCallback);// 开始转换坐标

  27.                                 // 坐标转换完之后的回调函数
  28.                                 function translateCallback(data) {
  29.                                         var lng = data.points[0].lng;
  30.                                         var lat = data.points[0].lat;
  31.                                         var newPoint = new BMap.Point(lng, lat);// 生成点
  32.                                         var geoc = new BMap.Geocoder();// 获取位置对象

  33.                                         if (localStorage.getItem("platfrom") === "ios") {
  34.                                                 pPoint = newPoint;
  35.                                         } else {
  36.                                                 pPoint = gpsPoint;
  37.                                         }

  38.                                         geoc.getLocation(pPoint, function(rs) {// 地址逆解析
  39.                                                 var userId = localStorage.getItem("username");
  40.                                                 addComp = rs.addressComponents;
  41.                                                 province = addComp.province;
  42.                                                 city = addComp.city;
  43.                                                 section = addComp.district;
  44.                                                 street = addComp.street;// addComp.streetNumber
  45.                                                 location = rs.address;

  46.                                                 justep.Baas.sendRequest({
  47.                                                         "url" : "/jinxdd/map",
  48.                                                         "action" : "getPosition",
  49.                                                         "params" : {
  50.                                                                 "province" : province,
  51.                                                                 "city" : city,
  52.                                                                 "longitude" : longitude,
  53.                                                                 "latitude" : latitude,
  54.                                                                 "latitude_transfered" : lat,
  55.                                                                 "longitude_transfered" : lng,
  56.                                                                 "section" : section,
  57.                                                                 "street" : street,
  58.                                                                 "location" : location,
  59.                                                                 "userId" : userId,
  60.                                                                 "action_type" : "GPS_TRACKING",// 在途跟踪
  61.                                                                 "addWho" : userId
  62.                                                         },
  63.                                                         "success" : function(data) {
  64.                                                                 console.log("tms_gps_tracking类型位置上传成功!");
  65.                                                                 position = "";// 上传成功后清除position的缓存
  66.                                                         },
  67.                                                         "error" : function(err) {
  68.                                                         }
  69.                                                 });
  70.                                         });
  71.                                 }
  72.                         }
  73.                         function error(error) {
  74.                                 switch (error.code) {
  75.                                 case error.PERMISSION_DENIED:
  76.                                         alert("未授予获取定位权限!");
  77.                                         break;
  78.                                 case error.PERMISSION_UNAVAILABLE:
  79.                                         alert("位置信息无效!");
  80.                                         break;
  81.                                 case error.TIMEOUT:
  82.                                         alert("获取定位信息超时,请重试!");
  83.                                         break;
  84.                                 case error.UNKOWN_ERROR:
  85.                                         alert("发生位未知错误!");
  86.                                         break;
  87.                                 }
  88.                         }
  89.                 }
  90.         };
  91.         return fluxUtil;
  92. });
复制代码





<a href="#自我介绍"/>点点点</a>
回复 支持 反对

使用道具 举报

发表于 2016-8-5 11:32:12 | 显示全部楼层
w1017894741 发表于 2016-8-5 11:23
后台可以确定是运行了的   ios定位是否也可以使用 navigator.geolocation.getCurrentPosition()方法? ...

应该是可以的!要不然怎么定位到A坐标的!
你先试试在APP开启的情况向定位是否正常??保证正常的情况下再去做后台运行!找出是哪儿出的问题!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

104

主题

369

帖子

1173

积分

金牌会员

王小二

Rank: 6Rank: 6

积分
1173
QQ
 楼主| 发表于 2016-8-5 11:52:52 | 显示全部楼层
liangyongfei 发表于 2016-8-5 11:32
应该是可以的!要不然怎么定位到A坐标的!
你先试试在APP开启的情况向定位是否正常??保证正常的情况下 ...

我做了多种情况下的多次测试,我把正式环境下的方法copy出来放到一个新的测试页面中,然后分别写成了,
ios(前台运行),ios_backmode(后台运行)两种情况,抓取的时间间隔是5秒钟一次。昨天做的这个测试用了进半个小时,发现前台后台抓取的位置都是没有问题的。   然而我一放到正式环境下就出问题,我正式环境下设置的是15分钟抓取一次。   就这么一会可以一会不可以,我到现在也确定不了问题到底出在哪里。   还有我使用的是getCurrentPosition方法,定时器重复调用这个方法时,是不是每次都会在success成功回调中返回一个新的position对象?现在就是怀疑这个position对象没有更新造成的这种问题
<a href="#自我介绍"/>点点点</a>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-18 06:36 , Processed in 0.083338 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表