[UWP] Windows 10 IoT App Service 簡單實作

2015-09-04

最近在測一些東西會用到App Service ,在這邊碰到一些壁,所以我在這邊筆記一下,希望可以幫到其他碰到的人,這邊先謝謝Pou 感謝他幫我補充一些觀念跟協助我找到問題
1.講解一下案例,我會註冊一個App Service 當她被呼叫的時候會跳出Notification 的提醒,首先我們先建立專案 ,我們先建立背景執行的部分
Image 124
記得選擇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
Image 127

3.在 AppServiceCaller  專案設定Package Family  Name ,點開AppServiceCaller 下 Package.appxmanifest  選擇其中的 Packaing,設定好Package Name 之後 Package family Name 就會得到了先複製下來之後會用到,這邊我得到Package Family Name 為 TestAppService_3h4fh30cej3ra
Image 128

4.點選 Declarations 得部分我們要註冊Service, 加入AppService 然後 Name 可以自己取名 我取名為 service1 , Entry point 的部分就是 步驟一個那個專案名稱.繼承IBackgroundTask 的物件名稱
Image 139

5.在AppServiceCaller  專案加入 TestAppServiceBGService  的.dll
Image 132

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 都是前面提到的,基本上我用顏色標示這樣比較好對應,呼叫結果
Image 136
Source Code:


當麻許的超技八 2014 | Donma Hsu Design.