模拟 GPS 位置和适用于 Android 的 Chrome
Posted
技术标签:
【中文标题】模拟 GPS 位置和适用于 Android 的 Chrome【英文标题】:Mock GPS location and Chrome for Android 【发布时间】:2017-01-05 23:30:21 【问题描述】:我有一个带有蓝牙的 Trimble ProXT GNSS 接收器,可以使用 Trimble GNSS Status 应用程序连接到安卓。该应用程序输出基本单元的位置,如果我在开发人员选项中选择该应用程序作为模拟位置提供程序,它在所有本机应用程序中运行良好,但如果我尝试使用使用 html5 地理位置 API 的 Web 应用程序,它会失败。我的 GIS 数据采集应用是基于网络的,我需要它来工作!
【问题讨论】:
【参考方案1】:我遇到了同样的问题,并能够从 Trimble 获得一些帮助:
我假设您正在使用 android,因为我们也看到了这种行为。不幸的是,您注意到的是 Google Chrome 的一个奇怪的行为特征。您会发现,如果您使用 Firefox 浏览器(或其他几个浏览器)并访问同一个 maps.google.com,该位置将正确显示。
令人费解的是,Location API 的 Chrome 实现并非在所有情况下都处理模拟位置。我们正在对此进行调查,但目前还没有正式的解决方案(除了非 Chrome 浏览器的解决方法)。
【讨论】:
【参考方案2】:在 R2 上使用 Trimble“GNSS 状态”应用程序并在 ipad+chrome 和各种 android+chrome 组合中遇到相同的问题,而 firefox 和 safari 工作正常。
一个简单的测试:
<DOCTYPE html>
<html>
<head>
<style>
body
background: white;
font-family: Arial, Helvetica, sans-serif;
font-size: 1em;
color: #000;
@media all and (max-width: 1000px)
body font-size: 200%;
</style>
<script>
function init()
var compass = document.getElementById('compass');
var lat = document.getElementById('lat');
var lon = document.getElementById('lon');
var acc = document.getElementById('acc');
var alt = document.getElementById('alt');
var altAcc = document.getElementById('altAcc');
var err = document.getElementById('err');
var heading = document.getElementById('heading');
var speed = document.getElementById('speed');
var timestamp = document.getElementById('timestamp');
if(window.DeviceOrientationEvent)
window.addEventListener('deviceorientation', function(event)
var alpha;
if(event.webkitCompassHeading)
alpha = event.webkitCompassHeading;
else
alpha = event.alpha;
compass.innerHTML = alpha;
, false);
if(navigator.geolocation)
var opts =
enableHighAccuracy: true,
timeout: 6000,
maximumAge: 5000
;
navigator.geolocation.watchPosition(
updateLocation,
handleLocationError,
opts
);
function updateLocation(position)
lat.innerHTML = position.coords.latitude;
lon.innerHTML = position.coords.longitude;
acc.innerHTML = position.coords.accuracy;
alt.innerHTML = position.coords.altitude;
altAcc.innerHTML = position.coords.altitudeAccuracy;
heading.innerHTML = position.coords.heading;
speed.innerHTML = position.coords.speed;
var t = new Date(position.timestamp).toString();
timestamp.innerHTML = t;
addMsg(t);
function handleLocationError(e)
var msg = e.code+': ';
switch (e.code)
case error.PERMISSION_DENIED:
msg += 'Permission was denied';
break;
case error.POSITION_UNAVAILABLE:
msg +='Position is currently unavailable.';
break;
case error.PERMISSION_DENIED_TIMEOUT:
msg += 'User took to long to grant/deny permission.';
break;
case error.UNKNOWN_ERROR:
msg += 'An unknown error occurred.';
break;
addMsg(msg);
function addMsg(msg)
err.appendChild(document.createTextNode('message: '+ msg));
err.appendChild(document.createElement("br"));
</script>
</head>
<body onload="init()" >
<p>compass: <span id="compass"></span> deg</p>
<hr>
<p>lat: <span id="lat"></span> deg</p>
<p>lon: <span id="lon"></span> deg</p>
<p>acc: <span id="acc"></span> m</p>
<p>alt: <span id="alt"></span> m +msl</p>
<p>alt. acc: <span id="altAcc"></span> m</p>
<p>heading: <span id="heading"></span> deg</p>
<p>speed: <span id="speed"></span> m/s</p>
<p>timestamp: <span id="timestamp"></span></p>
<hr>
<p>messages:</p>
<div id="err"></div>
</body>
</html>
【讨论】:
以上是关于模拟 GPS 位置和适用于 Android 的 Chrome的主要内容,如果未能解决你的问题,请参考以下文章