Я хочу перехватывать необработанные push-сообщения в фоновом процессе.Когда я пытаюсь его зарегистрировать, я получаю следующее исключение:
HResult -2147221164
Сообщение «Класс не зарегистрирован (исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))»
Код выглядит следующим образом:
public sealed class NotificationsTask : IBackgroundTask {
static private String sName = typeof(NotificationsTask).Name;
static private readonly String TAG = sName;
public void Run(IBackgroundTaskInstance taskInstance) {
RawNotification notification = (RawNotification) taskInstance.TriggerDetails;
String msg = notification.Content;
}
async static public void Register() {
var Status = BackgroundExecutionManager.GetAccessStatus();
Boolean OKToRegister = true;
switch (Status) {
case BackgroundAccessStatus.DeniedByUser:
case BackgroundAccessStatus.Unspecified:
case BackgroundAccessStatus.DeniedBySystemPolicy:
OKToRegister = false;
Status = await BackgroundExecutionManager.RequestAccessAsync();
switch (Status) {
case BackgroundAccessStatus.AllowedSubjectToSystemPolicy:
case BackgroundAccessStatus.AlwaysAllowed:
OKToRegister = true;
break;
}
break;
}
if (OKToRegister) {
Boolean found = false;
foreach (var task in BackgroundTaskRegistration.AllTasks) {
if (task.Value.Name == sName) {
found = true;
break;
}
}
if (!found) {
try {
var builder = new BackgroundTaskBuilder();
builder.TaskEntryPoint = typeof(NotificationsTask).FullName;
builder.Name = sName;
builder.SetTrigger(new PushNotificationTrigger());
builder.Register();
} catch (Exception e) {
PersistLog.e(TAG, "Register:" + e);
}
}
}
}
static public void UnRegister() {
BackgroundExecutionManager.RemoveAccess();
foreach (var task in BackgroundTaskRegistration.AllTasks) {
if (task.Value.Name == sName) {
task.Value.Unregister(true);
break;
}
}
}
}
Я пробовал запуск по таймеру, тот же результат.В моем тестовом примере я всегда вызываю метод UnRegister перед вызовом метода Register.Он не находит ранее зарегистрированный класс.
Я пытался добавить в файл манифеста:
<Extension Category="windows.backgroundTasks" EntryPoint="General.NotificationsTask">
<BackgroundTasks>
<Task Type="pushNotification" />
</BackgroundTasks>
</Extension>
Но затем я получаю сообщение об ошибке:
Ошибка проверки.ошибка 80080204: ошибка проверки манифеста приложения: строка 33, столбец 12, причина: если это не фоновая задача аудио, ей не разрешено использовать EntryPoint без ActivatableClassI