WinRT - 在通用应用程序

时间:2015-05-06 10:13:54

标签: javascript c# windows windows-runtime

我想在我的应用程序启动时启动我的IBackgroundTask。

我已将我的任务添加到.appxmanifest.xml文件中,我的扩展标记现在看起来像这样

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="CordovaApp.Library.UploadTask">
    <BackgroundTasks>
      <Task Type="systemEvent" />
      <Task Type="timer" />
    </BackgroundTasks>
  </Extension>
</Extensions>

我的IBackgroundTask类被称为UploadTask,并保存在另一个项目中,该项目的outtype设置为Windows运行时组件。

以下是代码的缩减版本,因此您可以看到名称空间等

namespace CordovaApp.Library
{
    public sealed class UploadTask : IBackgroundTask
    {
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            var connectionProfile = NetworkInformation.GetInternetConnectionProfile();

            // connectionProfile can be null (e.g. airplane mode)
            if (connectionProfile != null && connectionProfile.IsWlanConnectionProfile)
            {
                // custom code here
            }
        }
    }
}

我已将此项目的引用添加到我的通用运行时组件项目中。

一切都很好。

现在启动应用程序,我想我必须使用WinJs,所以我有以下代码。

var uploadTaskName = 'UploadTask';
var tasks = Windows.ApplicationModel.Background.BackgroundTaskRegistration.allTasks;
var uploadTaskFound = false;

for (var i = 0; i < tasks.length; i++) {
    if (tasks[i].Value.name == uploadTaskName) {
        successCallback();
        return;
    }
}

Windows.ApplicationModel.Background.BackgroundExecutionManager.requestAccessAsync().then(function() {
    var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

    builder.name = "Upload Task";
    builder.taskEntryPoint = "CordovaApp.Library.UploadTask";
    builder.setTrigger(new Windows.ApplicationModel.Background.TimeTrigger(15, false));
    return builder.register();
}).done(function () {
    successCallback();
}, function(err) {
    errorCallback(err);
});

现在requestAccessAsync方法总是抛出

的异常
  

0x80004005 - JavaScript运行时错误:未指定错误   WinRT信息:该应用程序不具备锁屏功能。

是否正确注册了所有内容?我通过笔记本电脑上的Visual Studio 2013运行它。

1 个答案:

答案 0 :(得分:1)

似乎因为已经安装了应用程序,所以没有给出权限。

通过卸载应用程序并重新运行它,我被提示允许/禁止后台服务运行。检查允许,现在似乎工作