首页 > 解决方案 > 屏幕关闭/暂停时,移动设备上的 HTML5 浏览器地理定位功能是否可用?

问题描述

为了替代我使用允许跟踪我的位置的本机应用程序,我想使用HTML5 Goelocation API生成一个 PWA 。

到目前为止,我能够实现的结果似乎表明HTML5 Goelocation API与原生 Android API 相比功能较差。

下面是我使用的代码,问题是 PWA/网站应用程序只接收不频繁的更新。此外,该应用程序仅在屏幕未关闭时接收位置。

这给 PWA 跟踪例如我的自行车之旅带来了巨大的障碍,因为我无法将屏幕和浏览器保持在前台,而我希望 PWA 即使在屏幕关闭时也能继续运行。

现在我知道,在大多数情况下,设备用户和有隐私意识的人会从用户代理/浏览器中受益,通过禁用我搜索的功能来减少资源浪费并限制隐私损失。

然而,从本质上讲,我查看了 MDN 文档,除了PositionOptions之外,我还没有找到任何关于 API 保证的线索。

在下面找到我试图使其作为代码工作的方式。

我的平台是 Android 上的 Gecko。如果可以在 Android 上的 Chromium 中取得更好的结果,我也会很高兴听到这个消息。

在 Android 上,我使用 Firefox。在其中,我想让我的网站提供一个页面,通过地理定位 API 跟踪我的移动,以替换我的 strave。

window.addEventListener("load",function(){

    var a=  document.createElement("div");
    var textarea = document.createElement("textarea");
    //textarea.value="aaaa"
    textarea.style.display="block"
    textarea.style.minHeight="5cm"
    textarea.style.width="100%"
    document.body.appendChild(a);
    document.body.appendChild(textarea);
    if(confirm("reset data?")){
        localStorage.clear() ;
    }
    localStorage.setItem("start"+Date.now(),startInfo);
        
    var startInfo = Object.keys(localStorage).length+ " " +Date.now()+ " " + (Date.now() % 864000);

    var lastTime=0,lastLat=0,lastLon=0,count=0,lastDistance=0;
    var startTime = Date.now();
    var distance = 0;

    if('geolocation' in navigator) {
        a.innerHTML="<h2>super wir haben geolocation!</h2>";
        setInterval(()=>{
        navigator.geolocation.getCurrentPosition((position) => {
            
    //      var a = document.createElement("div");
            count++;

            a.innerHTML="<h1>"+(((Date.now()-startTime)/1000)|0)+" "+((distance*100|0)/100)+"</h1><h3>"+startInfo+"</h3><h2>date="+(new Date()).toString()+"<br>lang="+position.coords.latitude+" long="+ position.coords.longitude+"</h2>";
            var lat = ((position.coords.latitude * 10000000) | 0)
            var lon = ((position.coords.longitude * 10000000) | 0)
            var time = Date.now();
            var deltaTime = time - lastTime;
            var deltaLat = lat - lastLat;
            var deltaLon = lon - lastLon;
            if(Math.abs(deltaLat)>100000 || Math.abs(deltaLon) > 100000)
            {
            } else{
                distance += Math.sqrt(deltaLat*deltaLat+deltaLon*deltaLon);
            }
            var deltaDistance = distance - lastDistance;
            lastLat=lat;
            lastLon=lon;
            lastTime=time;
            lastDistance=distance;

            newline = (((Date.now()-startTime)/1000)|0) + " dist="  + distance + "("+deltaDistance+") lat=" + lat + "("+deltaLat+") lon=" + lon + "("+deltaLon+") "; 
            textarea.value = newline + "\n" + textarea.value;
            
            localStorage.setItem("P"+(Date.now()%864000),deltaLat+" "+deltaLon+" "+deltaTime);
                
        },function(){},{timeout:900});
        },1000);
    } else {
        a.innerHTML="<h2> shit</h2>";
    }

});

标签: androidgeolocationprogressive-web-apps

解决方案


推荐阅读