最近在測一些東西會用到App Service ,在這邊碰到一些壁,所以我在這邊筆記一下,希望可以幫到其他碰到的人,這邊先謝謝Pou 感謝他幫我補充一些觀念跟協助我找到問題
1.講解一下案例,我會註冊一個App Service 當她被呼叫的時候會跳出Notification 的提醒,首先我們先建立專案 ,我們先建立背景執行的部分
記得選擇Windows Runtime Component (Universal Windows) 專案,下面的專案名稱取名為 TestAppServiceBGService ,方案名稱為TestAppServiceUWP,基本上因為等等還要建立其他專案,所以Solution Name 是跟專案名稱是不同的
之後我們建立一個Class TestAppServiceBGTask 並且繼承IBackgroundTask ,此時必須實作 Run(IBackgroundTaskInstance taskInstance) ,別擔心,VS 2015 會提醒你,所以,之後會長這樣
using System;
using Windows.ApplicationModel.Background;
namespace TestAppServiceBGService
{
public sealed class TestAppServiceBGTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
throw new NotImplementedException();
}
}
}
我們當然就是希望他被呼叫後能夠跳出Notification 所以我們輸入被呼叫後Notification 的Code
using System;
using Windows.ApplicationModel.Background;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
namespace TestAppServiceBGService
{
public sealed class TestAppServiceBGTask : IBackgroundTask
{
BackgroundTaskDeferral ServiceDeferral;
public void Run(IBackgroundTaskInstance taskInstance)
{
ServiceDeferral = taskInstance.GetDeferral();
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
Windows.Data.Xml.Dom.XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
stringElements[0].AppendChild(toastXml.CreateTextNode("背景被呼叫"));
stringElements[1].AppendChild(toastXml.CreateTextNode("App Service be invoked"));
ToastNotification toast = new ToastNotification(toastXml);
toast.Activated += delegate { };
ToastNotificationManager.CreateToastNotifier().Show(toast);
ServiceDeferral.Complete();
}
}
}
2.步驟一完成後,我們來建立呼叫的專案。首先,在方案中建立一個新的專案,是一般的 Blank App 專案名稱叫做 AppServiceCaller
3.在 AppServiceCaller 專案設定Package Family Name ,點開AppServiceCaller 下 Package.appxmanifest 選擇其中的 Packaing,設定好Package Name 之後 Package family Name 就會得到了先複製下來之後會用到,這邊我得到Package Family Name 為 TestAppService_3h4fh30cej3ra
4.點選 Declarations 得部分我們要註冊Service, 加入AppService 然後 Name 可以自己取名 我取名為 service1 , Entry point 的部分就是 步驟一個那個專案名稱.繼承IBackgroundTask 的物件名稱
5.在AppServiceCaller 專案加入 TestAppServiceBGService 的.dll
6. 呼叫 Appservice 的Code
private async void btnCall_Click(object sender, RoutedEventArgs e)
{
// Package Family Name : TestAppService_3h4fh30cej3ra
var appServiceConnection = new AppServiceConnection();
appServiceConnection.AppServiceName = "service1";
appServiceConnection.PackageFamilyName = "TestAppService_3h4fh30cej3ra";
var res = await appServiceConnection.OpenAsync();
if (res == AppServiceConnectionStatus.Success)
{
}
}
這裡面 AppService Name 跟 PackageName 都是前面提到的,基本上我用顏色標示這樣比較好對應,呼叫結果
Source Code: