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