added hmg_utils file
parent
9a477c7f54
commit
438a8dce03
@ -0,0 +1,121 @@
|
||||
import { Injectable } from "@angular/core";
|
||||
import { BackgroundGeolocation } from '@ionic-native/background-geolocation/ngx';
|
||||
import { CommonService } from "src/app/hmg-common/services/common/common.service";
|
||||
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
|
||||
import { DevicePermissionsService } from 'src/app/hmg-common/services/device-permissions/device-permissions.service';
|
||||
import { Geolocation } from '@ionic-native/geolocation/ngx';
|
||||
import { Platform } from "@ionic/angular";
|
||||
|
||||
declare var cordova: any;
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class HMGUtils {
|
||||
constructor(
|
||||
public backgroundGeolocation: BackgroundGeolocation,
|
||||
public common: CommonService,
|
||||
public ts: TranslatorService,
|
||||
private geolocation: Geolocation,
|
||||
public platform: Platform,
|
||||
public devicePermissionsService:DevicePermissionsService,
|
||||
) { }
|
||||
|
||||
async getCurrentLocation(callBack: Function) {
|
||||
if (this.platform.is('android')) {
|
||||
this.devicePermissionsService.requestLocationAutherization().then( async granted => {
|
||||
if(granted == true){
|
||||
if ((await this.isHuaweiDevice())) {
|
||||
this.getHMSLocation(callBack);
|
||||
} else {
|
||||
this.getGMSLocation(callBack);
|
||||
}
|
||||
}else{
|
||||
this.common.presentAlert(this.ts.trPK('general', 'location-permission-dialog'));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.getIOSLocation(callBack);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async isHuaweiDevice(): Promise<boolean> {
|
||||
var result = await new Promise((resolve, reject) => {
|
||||
cordova.plugins.CordovaHMSGMSCheckPlugin.isHmsAvailable(
|
||||
"index.js",
|
||||
(_res) => {
|
||||
var hmsAvailable = _res === "true";
|
||||
resolve(hmsAvailable);
|
||||
},
|
||||
(_err) => {
|
||||
reject({ "status": false, "error": JSON.stringify(_err) });
|
||||
alert("Error checking device HMS/GMS")
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
return (result == true);
|
||||
}
|
||||
|
||||
private getHMSLocation(callBack: Function) {
|
||||
try {
|
||||
|
||||
console.log("Huawei Location [Getting]");
|
||||
cordova.plugins.CordovaHMSLocationPlugin.requestLocation(
|
||||
"index.js",
|
||||
(_res) => {
|
||||
console.log("Huawei Location Success: [Stop Getting]");
|
||||
cordova.plugins.CordovaHMSLocationPlugin.removeLocation("", (_res) => { }, (_err) => { });
|
||||
var location = _res.split(',')
|
||||
if (location.length == 2) {
|
||||
var lat = Number(_res.split(',')[0]);
|
||||
var long = Number(_res.split(',')[1]);
|
||||
callBack({"latitude":lat, "longitude":long, "isfake":false})
|
||||
} else {
|
||||
alert("Invalid Huawei location from plugin.");
|
||||
}
|
||||
},
|
||||
(_err) => {
|
||||
console.log("Huawei Location [Getting Error]: " + + JSON.stringify(_err));
|
||||
alert("Error while getting Huawei location");
|
||||
}
|
||||
);
|
||||
|
||||
} catch (_err) {
|
||||
console.log("Huawei Location Plugin [Error]: " + + JSON.stringify(_err));
|
||||
alert("Error while initializing Huawei Location Plugin");
|
||||
}
|
||||
}
|
||||
|
||||
private getGMSLocation(callBack: Function) {
|
||||
this.backgroundGeolocation.getCurrentLocation({ timeout: 10000, enableHighAccuracy: true, maximumAge: 3000 }).then((resp) => {
|
||||
if (resp && (resp.latitude && resp.longitude)) {
|
||||
var isFakeLocation = resp.isFromMockProvider || resp.mockLocationsEnabled;
|
||||
var lat = resp.latitude;
|
||||
var long = resp.longitude;
|
||||
callBack({"latitude":lat, "longitude":long, "isfake":isFakeLocation})
|
||||
} else {
|
||||
this.common.presentAlert(this.ts.trPK('home', 'position-error'));
|
||||
}
|
||||
}, (error) => {
|
||||
this.common.presentAlert(this.ts.trPK('home', 'position-error'));
|
||||
});
|
||||
}
|
||||
|
||||
private getIOSLocation(callBack: Function) {
|
||||
this.geolocation.getCurrentPosition({ maximumAge: 3000, timeout: 10000, enableHighAccuracy: true }).then(resp => {
|
||||
if (resp && resp.coords.latitude && resp.coords.longitude) {
|
||||
var lat = resp.coords.latitude;
|
||||
var long = resp.coords.longitude;
|
||||
callBack({"latitude":lat, "longitude":long, "isfake":false})
|
||||
} else {
|
||||
this.common.presentAlert(this.ts.trPK('home', 'position-error'));
|
||||
}
|
||||
}).catch(error => {
|
||||
this.common.presentAlert(this.ts.trPK('home', 'position-error'));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue