• 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)


    http://ask.dcloud.net.cn/question/28090

    https://blog.csdn.net/qq_37508970/article/details/86649703

    各位新年好

    小弟以前用hbuilder开发过几个项目,现在有一新需求项目,在考虑是否使用它来实现:

    需要APP在后台能定期离线监控用户定位数据,使用的是百度地图,我已经知道可以离线获取定位信息,但不知道如何能后台运行(APP不关闭,切换到后台,或者熄屏后它能继续运行),在后台定期(如20分钟)获取用户当前的位置,并记录在本地(如localstorage),然后上线时向服务器提交这些数据。

    想请教各HBUILDER大神,或者DCLOUD的技术员们,这个是否可行,并且有没最简便的方法(如不需要触碰原生插件开发是最好),需支持android与IOS,谢谢。

    2017-02-04 17:38  分享
    Sychel

    Sychel

    app的事件有pause和resume,你可以在pause时候启动你的位置监听服务。但是Android会杀进程,需要在系统里面手动设置一下。但是demo用下来感觉不稳定。内存占用也相当大。
    附赠一段以前写的测试小demo

    复制代码//后台运行监听器  
    document.addEventListener("pause",function(){  
        if(interval==null){  
          interval = setInterval("listenner()",10000);  
        }  
    });  
    //回到前台监听器,添加回到程序运行的事件,清除监听器  
    document.addEventListener("resume", function(){  
        window.clearInterval(interval);  
        interval = null;  
    }, false );  
    /**  
     * 定时监听服务  
     */  
    function listenner(){  
        //先获取当前地理位置  
        plus.geolocation.getCurrentPosition(function(pos){  
            //后台实时定位交互  
                    //------交互逻辑  
            //拿到数据之后提示  
            plus.push.createMessage("提示标题","{text:"回执的json数据"}",{title:"测试":附近有好玩的地方哦~",cover:true});  
                   //播放一段提示语音  
            plus.audio.createPlayer("_www/audio/scenicAlert.wav").play(function(){  
                plus.audio.createPlayer("_www/audio/lookAlert.wav").play();  
            });  
        },function(e){  
            console.log("Gelocation Error: code - "+e.code+"; message - "+e.message);  
        },{timeout:5000,provider:'baidu'});  
    }  
     
    啸天

    啸天

    我来说下我的痛苦经历(IOS),Android 因为非原生,也做不到所谓的双进程保活,这里略过:

    1.HBuilder 打包的IOS应用并不能做到后台长久保活,即使你设置了后台定位,原因是DCloud的云端打包机没有支持

    1. 设置,隐私,定位,更改为始终,还是不能做到长久保活

    所以后来采取这样的方法:

    1.manifest.xml 里配置后台运行模式,配置后台定位、后台播放音乐

    1. js 代码做定时任务,播放无声音乐,每2分钟播放 1秒(保证到了后台3分钟的时效时,重新激活下应用,再次延长3分钟)
    2. 安装到IOS上后,手动去设置里,隐私,定位,更改为始终

    以上就这些,如果是IOS离线打包的,可以做到后台长久定位,至于Android 的,就我手头的华为、小米、魅族机器来测试看,微信、QQ也并不是真正的双进程保活,之所以杀不掉,是被厂商加入了白名单(华为),小米机器一杀一个准

     
    Sychel

    Sychel

    对了,主动后台运行,iOS貌似不可以,年代太久记不清了。Android如下:

    复制代码/**  
     * 后台运行  
     */  
    function backRunning(){  
        var main = plus.android.runtimeMainActivity();  
        main.moveTaskToBack(false);  
    }  
     
    • pango (作者)

      谢谢回复,我之前查好像IOS有一个叫UIbackendmode的东西,不知道是否可行,让APP进入后台(熄灭屏幕)后能定期监听位置

      2017-02-04 19:06

       

       

       

       

       

      --------------------------------------------------------------------------------------------------------------------------------

       

      "pause" : 运行环境从前台切换到后台事件

      document.addEventListener("pause", pauseCallback, capture);
      1
      tips: 当app从前台切换到后台时会触发此事件。 若应用需要处理从前台切换到后台的事件行为,可通过注册事件监听器来监听“pause”事件,此事件需要在plusready事件后通过document进行注册。

      "resume": 运行环境从后台切换到前台事件

      document.addEventListener("resume", resumeCallback, capture);
      1
      tips: 当app从后台切换到前台时会触发此事件。 若应用需要处理从后台切换到前台的事件行为,可通过注册事件监听器来监听“resume”事件,此事件需要在plusready事件后通过document进行注册。

      此文章,参考Hbuilder官方文档:http://www.html5plus.org/doc/zh_cn/events.html#plus.Events.%22resume%22

  • 相关阅读:
    ASP.NET MVC学习系列(二)-WebAPI请求
    dynamic介绍
    C#中dynamic的正确用法 以及 typeof(DynamicSample).GetMethod("Add");
    json中jobject
    泛型类型参数及约束
    new 运算符
    内核知识第五讲.驱动框架编写,以及3环和0环通信.
    编写内核驱动加载工具
    内核知识第四讲,简单的认识内核函数.以及调试驱动技巧
    内核第三讲,进入ring0,以及编写第一个内核驱动程序.
  • 原文地址:https://www.cnblogs.com/zouhao/p/10532576.html
Copyright © 2020-2023  润新知