如何开始在Windows/Windows Phone的通用应用中实现IBackgroundTask
的背景任务?
我正在使用Cordova为iOS,Android,WP8和Windows创建应用程序。每个平台似乎在应用程序启动之前运行本机类,因此您可以在此处添加代码以启动任务/服务。当Windows项目由Cordova创建时,它是作为JavaScript项目创建的,因此没有C#文件。
是我添加winJs
代码以启动背景任务的唯一选择?
最后,我通过将其创建为Cordova插件来解决此处。因此,我的插件具有一种称为init的方法,当应用程序启动时,我将调用该方法。使用插件,我可以在iOS,Android或Windows中调用服务。
创建插件后,我将从Windowsproxy.js文件中启动Windows服务,该文件是Cordova插件的一部分。
请注意,您的服务本身必须在单独的库中,并且该库必须将输出类型设置为Windows Runtime组件。
启动服务的示例代码如下
windowsproxy.js文件中的代码
init: function (successCallback, errorCallback) {
var taskRegistered = false;
var taskName = "Your Background Task Name";
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.allTasks.first();
// check if service already started
while (iter.hasCurrent) {
var task = iter.current.value;
if (task.name === taskName) {
taskRegistered = true;
break;
}
iter.moveNext();
}
if (taskRegistered) {
successCallback();
} else {
Windows.ApplicationModel.Background.BackgroundExecutionManager.requestAccessAsync().then(function () {
var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
builder.name = taskName;
builder.taskEntryPoint = "CordovaApp.Library.UploadTask"; // namespace of my windows runtime component library
builder.setTrigger(new Windows.ApplicationModel.Background.TimeTrigger(15, false));
builder.addCondition(new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.internetAvailable));
return builder.register();
}).done(function () {
successCallback();
}, function (err) {
errorCallback(err);
});
}
},
如果您需要选择要实现的类...我建议本地编写应用程序。
如果您想了解用JavaScript编写的逻辑的核心在Cordova插件中。
我个人建议这样的解决方案,写Cordova插件非常简单且非常有用。