Я разрабатываю фоновый сервис приложения для непрерывного получения широты местоположения в фоновом режиме. Используется плагин Cordova, т. Е. Добавлен плагин Cordova плагин добавить https://github.com/pmwisdom/cordova-background-geolocation-services.git.
Я хочу, чтобы служба работала в фоновом режиме даже после закрытия приложения. Под словом «убитый» я имею в виду длительное время нажатие кнопки «домой» -> просмотр всех запущенных приложений -> проведите мое приложение в сторону -> приложение убито ИЛИ нажмите кнопку «Назад» в течение длительного времени -> приложение убито
Мой код выглядит следующим образом.
CDVBackgroundLocationServices.swift ()
var msg = "Got Location Update: { \(latitude) - \(longitude) } Accuracy: \(accuracy) speed: \(speed)";
if(useActivityDetection) {
msg += " Stationary : \(activityManager.isStationary)";
}
log(message: msg);
locationCommandDelegate?.run(inBackground: {
var result:CDVPluginResult?;
let loc = self.locationToDict(loc: bestLocation!) as [NSObject: AnyObject];
result = CDVPluginResult(status: CDVCommandStatus_OK, messageAs:loc);
result!.setKeepCallbackAs(true);
locationCommandDelegate?.send(result, callbackId:locationUpdateCallback);
});
let urlToRequest = "c=mt90&a=tracker";
let url4 = URL(string: urlToRequest)!
let session4 = URLSession.shared
let request = NSMutableURLRequest(url: url4)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let speedOptionalString:String?
speedOptionalString = "\(speed)"
let respSpeed = "-1"
var makeSpeed="0";
if var respSpeed = speedOptionalString {
makeSpeed = "0"
}else{
makeSpeed = "\(speed)"
}
let requestData = [
"UUID":"\(deviceImei)",
"Latitude": "\(latitude)" ,
"Longitude": "\(longitude)" ,
"speed": "\(makeSpeed)",
] as [String : String]
request.httpBody = try! JSONEncoder().encode(requestData)
let task = session4.dataTask(with: request as URLRequest) { (data, response, error) in
guard let _: Data = data, let _: URLResponse = response, error == nil else {
return
}
let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("*****This is the data 4: \(dataString)") //JSONSerialization
}
task.resume()
}
DeviceReady ()
Msgs.Config.timeInterval=localStorage.getItem('timeInterval');
Msgs.Config.deviceId = device.uuid;
//Get plugin
bgLocationServices = window.plugins.backgroundLocationServices;
var timeInterval=Msgs.Config.timeInterval*1000;
bgLocationServices.configure({
//Both
desiredAccuracy: 20,
distanceFilter: 5,
debug: true,
interval: timeInterval,
useActivityDetection: true
Msgs.Config.deviceId,
});
bgLocationServices.start();
Я вижу, что служба работает, когда приложение открыто. Он все еще работает, когда я сворачиваю приложение с помощью кнопки home. Он все еще работает, когда я закрываю приложение с помощью кнопки назад. Но это прекратится, если я убью его, как упоминалось выше. Как мне это решить?