Mat*_*tti 12 android phonegap-plugins cordova cordova-plugins
我已经使用这些插件安装了Cordova 5.0.0:
cordova插件列表
cordova-plugin-device 1.0.1-dev "Device"
cordova-plugin-geolocation 1.0.0 "Geolocation"
cordova-plugin-globalization 1.0.0 "Globalization"
cordova-plugin-inappbrowser 1.0.1-dev "InAppBrowser"
cordova-plugin-network-information 1.0.0 "Network Information"
cordova-plugin-whitelist 1.0.1-dev "Whitelist"
Run Code Online (Sandbox Code Playgroud)
在任何Android虚拟设备上运行此代码:
onDeviceReady: function () {
var onSuccess = function(position) {
alert('Latitude: ' + position.coords.latitude + '\n' +
'Longitude: ' + position.coords.longitude + '\n' +
'Altitude: ' + position.coords.altitude + '\n' +
'Accuracy: ' + position.coords.accuracy + '\n' +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
'Heading: ' + position.coords.heading + '\n' +
'Speed: ' + position.coords.speed + '\n' +
'Timestamp: ' + position.timestamp + '\n');
};
// onError Callback receives a PositionError object
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
var options = { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true };
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
}
Run Code Online (Sandbox Code Playgroud)
返回:
D/CordovaNetworkManager( 1239): Connection Type: 3g
D/CordovaNetworkManager( 1239): Connection Extra Info: epc.tmobile.com
D/CordovaWebViewImpl( 1239): onPageFinished(file:///android_asset/www/index.html)
D/dalvikvm( 1239): GC_EXTERNAL_ALLOC freed 457K, 49% free 3174K/6151K, external 901K/1038K, paused 3ms
I/InputReader( 843): Device reconfigured: id=0x0, name=qwerty2, display size is now 240x400
I/InputManager-Callbacks( 843): No virtual keys found for device qwerty2.
D/SystemWebChromeClient( 1239): file:///android_asset/www/js/app.js: Line 127 : code: 3
D/SystemWebChromeClient( 1239): message: Timeout expired
Run Code Online (Sandbox Code Playgroud)
为什么总是返回超时?
我终于解决了发生这种情况的所有原因。这是由于两个选项:maximumAge
和timeout
。您可能会发现自己在设备和/或模拟器上运行您的应用程序。就我而言,两者都有。手机 GPS 比模拟器更有效。必须在设备上打开定位服务。你还需要设置一个超时时间,否则就会出问题。对于模拟器,您需要通过模拟器设置将 GPS 数据发送到您的应用程序,并且maximumAge
必须设置为比您发送它多长时间前的数字(以毫秒为单位)。
我也有我的设置,以便如果发生错误,它会通过调用这样的函数再次尝试,以便它会继续尝试直到得到它:
function gpsRetry(gpsOptions) {
navigator.geolocation.getCurrentPosition(gpsSuccess, gpsError, gpsOptions);
}
Run Code Online (Sandbox Code Playgroud)
我的错误函数是这样的:
function gpsError(error, gpsOptions) {
alert('code: ' + error.code + "\n" +
'message: ' + error.message + "\n");
gpsRetry(gpsOptions);
}
Run Code Online (Sandbox Code Playgroud)
我的成功功能是这样的:
function gpsSuccess(position) {
alert('Latitude: ' + position.coords.latitude + "\n" +
'Longitude: ' + position.coords.longitude + "\n" +
'Altitude: ' + position.coords.altitude + "\n" +
'Accuracy: ' + position.coords.accuracy + "\n" +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + "\n" +
'Heading: ' + position.coords.heading + "\n" +
'Speed: ' + position.coords.speed + "\n" +
'Timestamp: ' + position.timestamp + "\n");
}
Run Code Online (Sandbox Code Playgroud)
然后把它放在你的 onDeviceReady 块中:
let gpsOptions = {maximumAge: 300000, timeout: 5000, enableHighAccuracy: true};
navigator.geolocation.getCurrentPosition(gpsSuccess, gpsError, gpsOptions);
Run Code Online (Sandbox Code Playgroud)
完成所有设置后,它应该可以在您的设备上正常运行。对于模拟器,您需要加载您的应用程序,然后通过单击浮动菜单中的 ... 按钮然后单击发送将 GPS 坐标发送到应用程序:
一旦你这样做了,因为你的应用程序总是在重试,它应该会弹出带有 GPS 坐标的警报。
归档时间: |
|
查看次数: |
11608 次 |
最近记录: |