152 lines
5.0 KiB
JavaScript
Executable File
152 lines
5.0 KiB
JavaScript
Executable File
/**
|
|
* Request Location Accuracy plugin
|
|
*
|
|
* Copyright (c) 2016 Dave Alden (Working Edge Ltd.)
|
|
**/
|
|
var RequestLocationAccuracy = function(){
|
|
this.requesting = false;
|
|
};
|
|
|
|
/**
|
|
* Request location mode priority "no power": the best accuracy possible with zero additional power consumption.
|
|
* https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#PRIORITY_NO_POWER
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.REQUEST_PRIORITY_NO_POWER = 0;
|
|
|
|
/**
|
|
* Request location mode priority "low power": "city" level accuracy (about 10km accuracy)
|
|
* https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#PRIORITY_LOW_POWER
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.REQUEST_PRIORITY_LOW_POWER = 1;
|
|
|
|
/**
|
|
* Request location mode priority "balanced power": "block" level accuracy (about 100 meter accuracy)
|
|
* https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#PRIORITY_BALANCED_POWER_ACCURACY
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.REQUEST_PRIORITY_BALANCED_POWER_ACCURACY = 2;
|
|
|
|
/**
|
|
* Request location mode priority "high accuracy": the most accurate locations available. This will use GPS hardware to retrieve positions.
|
|
* https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest.html#PRIORITY_HIGH_ACCURACY
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.REQUEST_PRIORITY_HIGH_ACCURACY = 3;
|
|
|
|
|
|
/**
|
|
* Success due to current location settings already satisfying requested accuracy
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.SUCCESS_SETTINGS_SATISFIED = 0;
|
|
|
|
/**
|
|
* Success due to user agreeing to requested accuracy change
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.SUCCESS_USER_AGREED = 1;
|
|
|
|
/**
|
|
* Error due an unresolved request already being in progress.
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_ALREADY_REQUESTING = -1;
|
|
|
|
/**
|
|
* Error due invalid action requested
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_INVALID_ACTION = 0;
|
|
|
|
/**
|
|
* Error due invalid accuracy requested
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_INVALID_ACCURACY = 1;
|
|
|
|
/**
|
|
* Error due to exception in the native code
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_EXCEPTION = 2;
|
|
|
|
/**
|
|
* Error due to not being able to change location accuracy to requested state
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_CANNOT_CHANGE_ACCURACY = 3;
|
|
|
|
/**
|
|
* Error due to user rejecting requested accuracy change
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_USER_DISAGREED = 4;
|
|
|
|
/**
|
|
* Error due to failure to connect to Google Play Services API
|
|
* @type {number}
|
|
*/
|
|
RequestLocationAccuracy.prototype.ERROR_GOOGLE_API_CONNECTION_FAILED = 5;
|
|
|
|
/**
|
|
* Requests a specific accuracy for Location Services.
|
|
*
|
|
* @param [Function} successCallback - callback to be invoked on successful resolution of the requested accuracy.
|
|
* A single object argument will be passed which has two keys: "code" in an integer corresponding to a SUCCESS constant and indicates the reason for success;
|
|
* "message" is a string containing a description of the success.
|
|
* @param {Function} errorCallback - callback to be invoked on failure to resolve the requested accuracy.
|
|
* A single object argument will be passed which has two keys: "code" in an integer corresponding to an ERROR constant and indicates the reason for failure;
|
|
* "message" is a string containing a description of the error.
|
|
* @param {Integer} accuracy - The location accuracy to request defined by an integer corresponding to a REQUEST constant.
|
|
*/
|
|
RequestLocationAccuracy.prototype.request = function(successCallback, errorCallback, accuracy) {
|
|
var _this = this;
|
|
|
|
if(this.requesting){
|
|
return errorCallback({
|
|
code: _this.ERROR_ALREADY_REQUESTING,
|
|
message: "A request is already in progress"
|
|
});
|
|
}
|
|
|
|
this.requesting = true;
|
|
|
|
return cordova.exec(function(data){
|
|
_this.requesting = false;
|
|
successCallback(data)
|
|
},
|
|
function(err) {
|
|
_this.requesting = false;
|
|
errorCallback(err);
|
|
},
|
|
'RequestLocationAccuracy',
|
|
'request',
|
|
[accuracy]);
|
|
};
|
|
|
|
/**
|
|
* Indicates if a request is currently in progress.
|
|
*
|
|
* @param [Function} successCallback - callback to pass result to.
|
|
* This is passed a boolean argument indicating if a request is currently in progress;
|
|
*/
|
|
RequestLocationAccuracy.prototype.isRequesting = function(successCallback) {
|
|
successCallback(!!this.requesting);
|
|
};
|
|
|
|
/**
|
|
* Indicates if it is possible to request a specific location accuracy.
|
|
* This will return true if the app is authorized to use location.
|
|
*
|
|
* @param [Function} successCallback - callback to pass result to.
|
|
* This is passed a boolean argument indicating if a request can be made.
|
|
*/
|
|
RequestLocationAccuracy.prototype.canRequest = function(successCallback) {
|
|
return cordova.exec(successCallback, null, 'RequestLocationAccuracy', 'canRequest', []);
|
|
};
|
|
|
|
module.exports = new RequestLocationAccuracy();
|
|
|