android - 屏幕关闭/暂停时,移动设备上的 HTML5 浏览器地理定位功能是否可用?
问题描述
为了替代我使用允许跟踪我的位置的本机应用程序,我想使用HTML5 Goelocation API生成一个 PWA 。
到目前为止,我能够实现的结果似乎表明HTML5 Goelocation API与原生 Android API 相比功能较差。
下面是我使用的代码,问题是 PWA/网站应用程序只接收不频繁的更新。此外,该应用程序仅在屏幕未关闭时接收位置。
这给 PWA 跟踪例如我的自行车之旅带来了巨大的障碍,因为我无法将屏幕和浏览器保持在前台,而我希望 PWA 即使在屏幕关闭时也能继续运行。
现在我知道,在大多数情况下,设备用户和有隐私意识的人会从用户代理/浏览器中受益,通过禁用我搜索的功能来减少资源浪费并限制隐私损失。
然而,从本质上讲,我查看了 MDN 文档,除了PositionOptions之外,我还没有找到任何关于 API 保证的线索。
在下面找到我试图使其作为代码工作的方式。
- + HTML5 Goelocation 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>";
}
});
解决方案
推荐阅读
- tsql - 您如何使用 Datetime 列计算每天创建的行数?
- c++ - 类“std::map”在 Visual Studio Code 中没有成员“包含”
- python - Python请求关闭连接
- javascript - 当使用 d3 可重用图表模式时,在调度事件 (d3v5 +) 时如何实现拖动?
- numpy - 与 OpenCV 相比,PIL 图像像素化
- flutter - Flutter中自定义body
- r - 计算数据框中列的平均值的快捷方式
- python - 如何使用嵌套循环在 Excel 工作表中写入
- reactjs - ReactJS 递归性能
- asp.net-mvc - 在视图中使用泛型类 T