Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
c63d1420ae
commit
705cb0b397
|
@ -0,0 +1,163 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013 Research In Motion Limited.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var PositionError = require('./PositionError'),
|
||||||
|
ids = {},
|
||||||
|
loc;
|
||||||
|
|
||||||
|
function ensureLocator() {
|
||||||
|
if (loc == null)
|
||||||
|
loc = new Windows.Devices.Geolocation.Geolocator();
|
||||||
|
|
||||||
|
return loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
function createErrorCode() {
|
||||||
|
switch (loc.locationStatus) {
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.initializing:
|
||||||
|
// This status indicates that a location device is still initializing
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.noData:
|
||||||
|
// No location data is currently available
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.notInitialized:
|
||||||
|
// This status indicates that the app has not yet requested
|
||||||
|
// location data by calling GetGeolocationAsync() or
|
||||||
|
// registering an event handler for the positionChanged event.
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.notAvailable:
|
||||||
|
// Location is not available on this version of Windows
|
||||||
|
return PositionError.POSITION_UNAVAILABLE;
|
||||||
|
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.disabled:
|
||||||
|
// The app doesn't have permission to access location,
|
||||||
|
// either because location has been turned off.
|
||||||
|
return PositionError.PERMISSION_DENIED;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getLocation: function (success, fail, args, env) {
|
||||||
|
ensureLocator();
|
||||||
|
if (loc != null)
|
||||||
|
{
|
||||||
|
var highAccuracy = args[0],
|
||||||
|
maxAge = args[1];
|
||||||
|
|
||||||
|
loc.desiredAccuracy = highAccuracy ?
|
||||||
|
Windows.Devices.Geolocation.PositionAccuracy.high :
|
||||||
|
Windows.Devices.Geolocation.PositionAccuracy.default;
|
||||||
|
|
||||||
|
loc.reportInterval = maxAge ? maxAge : 0;
|
||||||
|
|
||||||
|
loc.getGeopositionAsync().then(
|
||||||
|
function (pos) {
|
||||||
|
success({
|
||||||
|
latitude: pos.coordinate.latitude,
|
||||||
|
longitude: pos.coordinate.longitude,
|
||||||
|
altitude: pos.coordinate.altitude,
|
||||||
|
accuracy: pos.coordinate.accuracy,
|
||||||
|
heading: pos.coordinate.heading,
|
||||||
|
velocity: pos.coordinate.speed,
|
||||||
|
altitudeAccuracy: pos.coordinate.altitudeAccuracy,
|
||||||
|
timestamp: pos.coordinate.timestamp
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function (err) {
|
||||||
|
fail({
|
||||||
|
code: createErrorCode(),
|
||||||
|
message: err.message
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fail({
|
||||||
|
code: PositionError.POSITION_UNAVAILABLE,
|
||||||
|
message: "You do not have the required location services present on your system."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
addWatch: function (success, fail, args, env) {
|
||||||
|
ensureLocator();
|
||||||
|
var clientId = args[0],
|
||||||
|
highAccuracy = args[1],
|
||||||
|
|
||||||
|
onPositionChanged = function (e) {
|
||||||
|
success({
|
||||||
|
latitude: e.position.coordinate.latitude,
|
||||||
|
longitude: e.position.coordinate.longitude,
|
||||||
|
altitude: e.position.coordinate.altitude,
|
||||||
|
accuracy: e.position.coordinate.accuracy,
|
||||||
|
heading: e.position.coordinate.heading,
|
||||||
|
velocity: e.position.coordinate.speed,
|
||||||
|
altitudeAccuracy: e.position.coordinate.altitudeAccuracy,
|
||||||
|
timestamp: e.position.coordinate.timestamp
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
onStatusChanged = function (e) {
|
||||||
|
switch (e.status) {
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.noData:
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.notAvailable:
|
||||||
|
fail({
|
||||||
|
code: PositionError.POSITION_UNAVAILABLE,
|
||||||
|
message: "Data from location services is currently unavailable or you do not have the required location services present on your system."
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.disabled:
|
||||||
|
fail({
|
||||||
|
code: PositionError.PERMISSION_DENIED,
|
||||||
|
message: "Your location is currently turned off."
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.initializing:
|
||||||
|
case Windows.Devices.Geolocation.PositionStatus.ready:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
loc.desiredAccuracy = highAccuracy ?
|
||||||
|
Windows.Devices.Geolocation.PositionAccuracy.high :
|
||||||
|
Windows.Devices.Geolocation.PositionAccuracy.default;
|
||||||
|
|
||||||
|
loc.addEventListener("positionchanged", onPositionChanged);
|
||||||
|
loc.addEventListener("statuschanged", onStatusChanged);
|
||||||
|
|
||||||
|
ids[clientId] = { pos: onPositionChanged, status: onStatusChanged };
|
||||||
|
},
|
||||||
|
|
||||||
|
clearWatch: function (success, fail, args, env) {
|
||||||
|
var clientId = args[0],
|
||||||
|
callbacks = ids[clientId];
|
||||||
|
|
||||||
|
if (callbacks) {
|
||||||
|
loc.removeEventListener("positionchanged", callbacks.pos);
|
||||||
|
loc.removeEventListener("statuschanged", callbacks.status);
|
||||||
|
|
||||||
|
delete ids[clientId];
|
||||||
|
}
|
||||||
|
|
||||||
|
success && success();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
require("cordova/windows8/commandProxy").add("Geolocation", module.exports);
|
Loading…
Reference in New Issue
Block a user