如何在Windows Winrt/c#的设备/应用程序启动上启动背景任务



如何开始在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插件非常简单且非常有用。

最新更新