UWP デバイス アプリでの印刷通知の操作

Important

デバイス メタデータは非推奨となり、Windows の今後のリリースで削除される予定です。 この機能の置き換えについては、「 ドライバー パッケージ コンテナー メタデータ」を参照してください。

UWP デバイス アプリは、v4 印刷ドライバーから送信される双方向通信 (Bidi) イベントに応答できます。 この記事では、印刷通知について説明し、印刷 設定と印刷通知 のサンプルの C# バージョンでバックグラウンド タスクを使用して印刷通知に応答する方法について説明します。 バックグラウンド タスクでは、通知の詳細をローカル アプリ データ ストアに保存し、トーストを送信し、タイルとバッジを更新する方法を示します。 UWP デバイス アプリ全般の詳細については、「UWP デバイス アプリを使用する」を参照してください。

C# バージョンの印刷設定と印刷通知のサンプルでは、BackgroundTask プロジェクトのアプリ (バックグラウンド タスク) のバックグラウンド部分を示します。 バックグラウンド タスクのコードは 、PrintBackgroundTask.cs ファイルにあります。 スタート画面から起動できる全画面表示アプリである フォアグラウンド アプリは、 DeviceAppForPrinters プロジェクトにあります。 InkLevel.xaml.cs ファイルは、フォアグラウンド アプリから通知の詳細にアクセスできる 1 つの方法を示しています。 印刷通知を操作するために、このサンプルでは PrinterExtensionLibrary プロジェクトのプリンター拡張ライブラリを使用します。 プリンター拡張ライブラリは、v4 印刷ドライバーのプリンター拡張インターフェイスにアクセスするための便利な方法を提供します。 詳細については、 プリンター拡張ライブラリの概要を参照してください。

この記事に示すコード例は、C# バージョンの 印刷設定と印刷通知の サンプルに基づいています。 このサンプルは、JavaScript と C++ でも使用できます。 C++ は COM に直接アクセスできるため、サンプルの C++ バージョンにはコード ライブラリ プロジェクトは含まれません。 サンプルをダウンロードして、最新バージョンのコードを確認します。

印刷通知を使用すると、UWP デバイス アプリは、紙詰まり、開いているプリンター ドア、インク レベルの低い、プリンターの用紙切れエラーなど、印刷中に重要なプリンター イベントをユーザーに通知できます。 プリンターが通知をトリガーすると、システム イベント ブローカーによってアプリのバックグラウンド タスクが実行されます。 バックグラウンド タスクは、通知の詳細を保存したり、トーストを送信したり、タイルを更新したり、バッジを更新したり、あるいは何もしないこともできます。 通知の詳細を保存することで、アプリはユーザーがプリンターの問題を理解して修正するのに役立つエクスペリエンスを提供できます。

プリンターの製造元は、UWP デバイス アプリで印刷通知を使用するために、v4 印刷ドライバーに Bidi と DriverEvent XML ファイルを実装する必要があります。 詳細については、「 双方向通信」を参照してください。

DriverEvent が発生し、UWP デバイス アプリのバックグラウンド タスクが開始されると、アプリには続行方法に関するいくつかのオプションがあります。 タスクの起動につながるフローの詳細については、「 カスタマイズされた UI のドライバーサポート」を参照してください。

バックグラウンド タスクでは、次のことができます。

タイル通知またはトースト通知を使用すると、ユーザーはフォアグラウンド アプリを簡単に起動できます。 フォアグラウンド アプリを起動すると、App.xaml.csの OnLaunched メソッドを使用して、タイルまたはトーストによって起動されたかどうかを確認できます。 その場合、フォアグラウンド アプリは ローカル アプリ データ ストア内の印刷通知の詳細にアクセスできます。

Prerequisites

開始する前に、以下の操作を行います。

  1. v4 プリンター ドライバーを使用してプリンターがインストールされていることを確認します。 詳細については、「 v4 印刷ドライバーの開発」を参照してください。

  2. 開発用 PC をセットアップします。 ツールのダウンロードと開発者アカウントの作成については、「 作業の開始 」を参照してください。

  3. アプリをストアに関連付けます。 詳細については、「 UWP デバイス アプリの作成」を参照してください。

  4. プリンターをアプリに関連付けるプリンターのデバイス メタデータを作成します。 詳細については、「 デバイス メタデータの作成」を参照してください。

  5. アプリのメイン ページの UI をビルドします。 すべての UWP デバイス アプリはスタート画面から起動でき、全画面表示で表示されます。 スタート エクスペリエンスを使用して、デバイスの特定のブランドと機能に一致する方法で製品またはサービスを強調表示します。 使用できる UI コントロールの種類に特別な制限はありません。 全画面表示エクスペリエンスの設計を開始するには、 Microsoft Store の設計原則を参照してください。

  6. C# または JavaScript を使用してアプリを作成する場合は、 PrinterExtensionLibrary プロジェクトと DeviceAppForPrintersLibrary プロジェクトを UWP デバイス アプリ ソリューションに追加します。 これらの各プロジェクトは、 印刷設定と印刷通知の サンプルで確認できます。

C++ は COM に直接アクセスできるため、C++ アプリでは、COM ベースのプリンター デバイス コンテキストを操作するために別のライブラリは必要ありません。

手順 1: バックグラウンド タスクを登録する

Windows でアプリが印刷通知を処理できることを認識するには、印刷通知のバックグラウンド タスク拡張機能を登録する必要があります。 この拡張機能は Extension 要素で宣言され、 Category 属性は windows.backgroundTasks に設定され、 EntryPoint 属性は BackgroundTask.PrintBackgroundTask に設定されます。 拡張機能には、タスクの種類Taskサポートしていることを示すsystemEvent要素も含まれています。

印刷バックグラウンド タスク拡張機能は、Microsoft Visual Studioのマニフェスト デザイナーの [宣言] タブに追加できます。 XML (テキスト) エディターを使用して、アプリ パッケージ マニフェスト XML を手動で編集することもできます。 ソリューション エクスプローラーで Package.appxmanifest ファイルを右クリックして、オプションを編集します。

この例では、アプリ パッケージ マニフェスト ファイル Extension に表示される、要素のバックグラウンド タスク拡張機能を示します。

<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest">
  <Identity Name="Microsoft.SDKSamples.DeviceAppForPrinters.CS" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="1.0.0.0" />
  <Properties>
    <DisplayName>Device App For Printers C# sample</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Assets\storeLogo-sdk.png</Logo>
  </Properties>
  <Prerequisites>
    <OSMinVersion>6.3.0</OSMinVersion>
    <OSMaxVersionTested>6.3.0</OSMaxVersionTested>
  </Prerequisites>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="DeviceAppForPrinters" Executable="$targetnametoken$.exe" EntryPoint="DeviceAppForPrinters.App">
      <VisualElements DisplayName="Device App For Printers C# sample" Logo="Assets\squareTile-sdk.png"
                      SmallLogo="Assets\smallTile-sdk.png" Description="DeviceAppForPrinters C# sample"
                      ForegroundText="light" BackgroundColor="#00b2f0" ToastCapable="true">
        <DefaultTile ShowName="allLogos" ShortName="App4PrinterCS" WideLogo="Assets\tile-sdk.png" />
        <SplashScreen Image="Assets\splash-sdk.png" BackgroundColor="#00b2f0" />
      </VisualElements>
      <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTask.PrintBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent" />
          </BackgroundTasks>
        </Extension>
        <Extension Category="windows.printTaskSettings" Executable="$targetnametoken$.exe" EntryPoint="DeviceAppForPrinters.App" />
      </Extensions>
    </Application>
  </Applications>
</Package>

手順 2: デバイス メタデータを構成する

デバイス メタデータ作成ウィザードを使用してアプリをデバイスに関連付ける場合は、[UWP デバイス アプリ情報の指定] ページの [通知ハンドラー] ボックスを必ず完了してください。 これにより、印刷通知中にアプリのバックグラウンド タスクが確実に呼び出されます。

デバイス メタデータを編集する方法の詳細な手順については、「 テスト 」セクションを参照してください。

手順 3: UI をビルドする

アプリをビルドする前に、デザイナーやマーケティング チームと協力してユーザー エクスペリエンスを設計する必要があります。 ユーザー エクスペリエンスは、会社のブランド化の側面を投影し、ユーザーとの接続を構築するのに役立ちます。

設計ガイドライン

タイルとバッジのエクスペリエンスを設計する前に、Microsoft Store アプリのガイドラインを確認することが重要です。 このガイドラインは、アプリが他の UWP アプリと一貫性のある直感的なエクスペリエンスを提供するのに役立ちます。

アプリのメイン ページでは、Windows 8.1 で複数のアプリをさまざまなサイズで 1 つのモニターに表示できることに注意してください。 画面サイズ、ウィンドウ サイズ、向きの間でアプリを適切にリフローする方法の詳細については、次のガイドラインを参照してください。

ベスト プラクティス

  • 通知にアクション ワードを含めないでください。 通知メッセージでは、ユーザーに通知をプッシュ、押す、または選択するように指示するテキストを使用しないでください。 ユーザーは、トーストをタップすれば詳細情報を確認できることをすでに理解しています。 たとえば、"プリンターがインクが少ない" のではなく、"インクが少ない" と書き込むだけです。 ボタンを押してトラブルシューティングを行います。

  • 操作をシンプルに保ちます。 通知エクスペリエンスに表示されるすべての内容は、通知に関連している必要があります。 たとえば、紙詰まりに関する通知ページには、その問題の解決に関するリンクと情報のみが含まれている必要があります。 インクの購入やその他のサポート情報など、関係のないエクスペリエンスへのリンクを含めることはできません。

  • マルチメディアを使用します。 デバイスの実際の写真、ビデオ、またはイラストを使用して、ユーザーがデバイスの問題をすばやく解決できるようにします。

  • ユーザーをアプリのコンテキスト内に保持します。 問題に関する情報を提供する場合は、オンラインまたはその他のサポート資料にリンクしないでください。 ユーザーをアプリのコンテキストに保持します。

手順 4: バックグラウンド タスクを作成する

アプリが印刷通知のバックグラウンド タスクを登録する場合は、バックグラウンド タスクのアクティブ化のハンドラーを提供する必要があります。 印刷設定と印刷通知のサンプルでは、PrintBackgroundTask クラスが印刷通知を処理します。

プリンターの状態がユーザーの介入をすぐに必要するものではない場合は、トーストを表示するのではなく、タイルを更新します。 たとえば、インクの状態が低い場合は、タイルの更新で十分です。 ただし、プリンターのインクが切れている場合は、アプリで短いポップアップ通知が表示されます。

通知の詳細の保存

バックグラウンド タスクはフォアグラウンド アプリを直接起動できません。ユーザーのみが、タイル、トースト、またはスタートからアプリを起動できます。 そのため、フォアグラウンド アプリが印刷通知の詳細に確実にアクセスできるように、バックグラウンド タスクによってローカル ストレージに保存されます。 ローカル ストレージの使用の詳細については、「 クイック スタート: ローカル アプリ データ」を参照してください。

印刷通知がトリガーされると、Windows は Run メソッドを呼び出してバックグラウンド タスクを実行します。 通知データは、Windows.Devices.Printers.Extensions.PrintNotificationEventDetails 型にキャストする必要があるメソッド パラメーターを使用してバックグラウンド タスクに渡されます。 そのオブジェクトの PrinterName プロパティと EventData プロパティには、それぞれプリンター名と Bidi メッセージが含まれます。

この例では、バックグラウンド タスクの Run メソッドを PrintBackgroundTask.cs ファイルに示します。このファイルでは、トースト、タイル、バッジの各メソッドが呼び出される前に、印刷通知の詳細がアプリ設定に保存されます。

public void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance)
{
    // Save notification details to local storage
    PrintNotificationEventDetails details = (PrintNotificationEventDetails)taskInstance.TriggerDetails;
    settings.Values[keyPrinterName] = details.PrinterName;
    settings.Values[keyAsyncUIXML] = details.EventData;

    // Demonstrate possible actions
    ShowToast(details.PrinterName, details.EventData);
    UpdateTile(details.PrinterName, details.EventData);
    UpdateBadge();
}

タイルの更新

印刷通知の詳細が UpdateTile メソッドに送信されると、サンプルのバックグラウンド タスクでタイルに表示する方法が示されます。 タイルの詳細については、「タイルとタイルの通知の概要」を参照してください。

この例では、バックグラウンド タスクの UpdateTile メソッドを PrintBackgroundTask.cs ファイルに示します。

void UpdateTile(string printerName, string bidiMessage)
{
    TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();
    tileUpdater.Clear();

    XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150Text09);
    XmlNodeList tileTextAttributes = tileXml.GetElementsByTagName("text");
    tileTextAttributes[0].InnerText = printerName;
    tileTextAttributes[1].InnerText = bidiMessage;

    TileNotification tileNotification = new TileNotification(tileXml);
    tileNotification.Tag = "tag01";
    tileUpdater.Update(tileNotification);
}

バッジの更新

UpdateBadge メソッドは、BadgeNotification クラスを使用してバッジを更新する方法を示しています。 タイルの詳細については、「バッジの 概要」を参照してください。

この例では、バックグラウンド タスクの UpdateBadge メソッドを PrintBackgroundTask.cs ファイルに示します。

void UpdateBadge()
{
    XmlDocument badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeGlyph);
    XmlElement badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
    badgeElement.SetAttribute("value", "error");

    var badgeNotification = new BadgeNotification(badgeXml);
    BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeNotification);
}

乾杯をする

トースト通知は、関連する時間の機密情報を含み、アプリ内の関連コンテンツにすばやくアクセスできる、ユーザーへの一時的なメッセージです。 トースト通知は、ユーザーが興味のある内容をフォローするためにアプリに戻るよう促すものとして表示されるべきです。 詳細については、「 トースト通知の概要」を参照してください。

トースト通知を有効にするには、アプリがトースト対応であることをアプリ パッケージ マニフェストに登録する必要があります。 VisualElements要素で、ToastCapable属性を true に設定します。

Important

トーストを常に表示することはお勧めしません。特に、操作ができないイベントの場合です。 これはユーザーにとって煩わしくなる場合があり、そのアプリからのすべてのトースト通知をオフにしてしまう可能性があります。 ユーザーの即時の注意を必要としないイベントの場合は、タイルとバッジのみを更新し、トーストを表示しないことをお勧めします。

この例では、アプリ パッケージ マニフェスト ファイル ToastCapable に表示されるVisualElements要素の属性を示します。

<VisualElements DisplayName="Device App For Printers C# sample" Logo="Assets\squareTile-sdk.png"
                SmallLogo="Assets\smallTile-sdk.png" Description="DeviceAppForPrinters C# sample"
                ForegroundText="light" BackgroundColor="#00b2f0" ToastCapable="true">
  <DefaultTile ShowName="allLogos" ShortName="App4PrinterCS" WideLogo="Assets\tile-sdk.png" />
  <SplashScreen Image="Assets\splash-sdk.png" BackgroundColor="#00b2f0" />
</VisualElements>

この例は、PrintBackgroundTask.cs ファイルの ShowToast メソッドの例です。 titlebodyという名前の 2 つの文字列に基づいてトーストを生成する方法を示します。

void ShowToast(string title, string body)
{
    //
    // Get Toast template
    //
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    //
    // Pass to app as eventArgs.detail.arguments
    //
    ((XmlElement)toastXml.SelectSingleNode("/toast")).SetAttribute("launch", title);

    //
    // The ToastText02 template has 2 text nodes (a header and a body)
    // Assign title to the first one, and body to the second one
    //
    XmlNodeList textList = toastXml.GetElementsByTagName("text");
    textList[0].AppendChild(toastXml.CreateTextNode(title));
    textList[1].AppendChild(toastXml.CreateTextNode(body));

    //
    // Show the Toast
    //
    ToastNotification toast = new ToastNotification(toastXml);
    ToastNotificationManager.CreateToastNotifier().Show(toast);
}

手順 5: アクティブ化の手続きを行う

印刷通知によってバックグラウンド タスクがトリガーされた後は、トースト通知またはタイルをタップしてアプリを起動できます。 アプリがいずれかから起動された場合、プロパティ LaunchActivatedEventArgs.arguments を介してパラメーターがアプリに渡されます。 アクティブ化とMicrosoft Storeアプリのライフサイクルの詳細については、「アプリケーションのライフサイクル」を参照してください。

これらのケースでアプリがアクティブ化されたかどうかを判断するには、 OnLaunched イベントを処理し、イベント ハンドラーに渡されるイベント引数を調べます。 イベント引数が null の場合、アプリは Start からユーザーによってアクティブ化されました。 イベント引数が null でない場合、アプリはトーストまたはタイルから起動されました。

この例は、App.xaml.cs ファイルの OnLaunched メソッドの例です。 トーストまたはタイルからのアクティブ化を処理する方法を示します。

protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
    Frame rootFrame = Window.Current.Content as Frame;

    // Do not repeat app initialization when the Window already has content,
    // just ensure that the window is active

    if (rootFrame == null)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        rootFrame = new Frame();
        // Associate the frame with a SuspensionManager key
        SuspensionManager.RegisterFrame(rootFrame, "AppFrame");

        if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
        {
            // Restore the saved session state only when appropriate
            try
            {
                await SuspensionManager.RestoreAsync();
            }
            catch (SuspensionManagerException)
            {
                //Something went wrong restoring state.
                //Assume there is no state and continue
            }
        }

        // Place the frame in the current Window
        Window.Current.Content = rootFrame;
    }
    if (rootFrame.Content == null || !String.IsNullOrEmpty(args.Arguments))
    {
        // When the navigation stack isn't restored or there are launch arguments
        // indicating an alternate launch (e.g.: via toast or secondary tile),
        // navigate to the appropriate page, configuring the new page by passing required
        // information as a navigation parameter
        if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
        {
            throw new Exception("Failed to create initial page");
        }
    }
    // Ensure the current window is active
    Window.Current.Activate();
}

手順 6: 通知の詳細にアクセスする

バックグラウンド タスクはフォアグラウンド アプリを直接起動できないため、フォアグラウンド アプリがアクセスできるように、印刷通知の詳細をアプリの設定に保存する必要があります。 ローカル ストレージの使用の詳細については、「 クイック スタート: ローカル アプリ データ」を参照してください。

この例では、 印刷設定と印刷通知 サンプルのアプリ設定からプリンター名と Bidi メッセージを取得する方法を示します。 コードは、InkLevel.xaml.cs ファイルの DisplayBackgroundTaskTriggerDetails メソッドから取得されます。 キー インデックス値 ( keyPrinterNamekeyAsyncUIXML) は、バックグラウンド タスクで使用されるのと同じ文字列定数 PrintBackgroundTask.cs

void DisplayBackgroundTaskTriggerDetails()
{
    String outputText = "\r\n";

    try
    {
        string printerName = settings.Values[keyPrinterName].ToString();
        outputText += ("Printer name from background task triggerDetails: " + printerName);
    }
    catch (Exception)
    {
        outputText += ("No printer name retrieved from background task triggerDetails ");
    }

    outputText += "\r\n";
    try
    {
        string asyncUIXML = settings.Values[keyAsyncUIXML].ToString();
        outputText += ("AsyncUI xml from background task triggerDetails: " + asyncUIXML);
    }
    catch (Exception)
    {
        outputText += ("No asyncUI xml retrieved from background task triggerDetails ");
    }

    ToastOutput.Text += outputText;
}

Testing

UWP デバイス アプリをテストする前に、デバイス メタデータを使用してプリンターにリンクする必要があります。

デバイス アプリ情報をプリンターに追加するには、プリンターのデバイス メタデータ パッケージのコピーが必要です。 デバイス メタデータがない場合は、「UWP デバイス アプリのデバイス メタデータを作成する」の記事の説明に従って、デバイス メタデータ作成ウィザードを使用して作成できます。

デバイス メタデータ作成ウィザードを使用するには、この記事の手順を完了する前に、Microsoft Visual Studio Professional、Microsoft Visual Studio Ultimate、またはスタンドアロン SDK for Windows 8.1 をインストールする必要があります。 Microsoft Visual Studio Express for Windows をインストールすると、ウィザードを含まないバージョンの SDK がインストールされます。

次の手順では、アプリをビルドし、デバイス メタデータをインストールします。

  1. テスト署名を有効にします。

    1. %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86 から、DeviceMetadataWizard.exe をダブルクリックしてデバイス メタデータ作成ウィザードを起動してください。

    2. [ツール] メニューの [テスト署名を有効にする] を選択します。

  2. コンピューターを再起動する

  3. ソリューション (.sln) ファイルを開いてソリューションをビルドします。 F7 キーを押すか、サンプルが読み込まれた後、上部のメニューから Build->Build ソリューション に移動します。

  4. プリンターを取り外してアンインストールします。 この手順は、次回デバイスが検出されるときに更新されたデバイス メタデータを Windows が読み取るようにする必要があります。

  5. デバイス メタデータを編集して保存します。 デバイス アプリをデバイスにリンクするには、デバイス アプリをデバイスに関連付ける必要があります。

    デバイス メタデータがまだ作成されていない場合は、「 UWP デバイス アプリのデバイス メタデータを作成する」を参照してください

    1. デバイス メタデータ作成ウィザードがまだ開いていない場合は、DeviceMetadataWizard.exeをダブルクリックして、%ProgramFiles(x86)%\Windows Kits\8.1\bin\x86 から起動します。

    2. [ デバイス メタデータの編集] を選択します。 このオプションを使用すると、既存のデバイス メタデータ パッケージを編集できます。

    3. [ 開く ] ダイアログ ボックスで、UWP デバイス アプリに関連付けられているデバイス メタデータ パッケージを見つけます。 ( devicemetadata-ms ファイル拡張子があります)。

    4. [ UWP デバイス アプリ情報の指定 ] ページで、[ UWP デバイス アプリ] ボックスに Microsoft Store アプリ情報を入力します。 [ UWP アプリ マニフェスト ファイルのインポート] を選択すると、 パッケージ名発行元名UWP アプリ ID が自動的に入力されます。

    5. アプリがプリンター通知に登録している場合は、[ 通知ハンドラー ] ボックスに入力します。 [イベント ID] に、印刷イベント ハンドラーの名前を入力します。 イベント アセットに、そのコードが存在するファイルの名前を入力します。

    6. 完了したら、[完了] ページが表示されるまで [次へ] を選択します。

    7. [ デバイス メタデータ パッケージの確認 ] ページで、すべての設定が正しいことを確認し、[ ローカル コンピューター上のメタデータ ストアにデバイス メタデータ パッケージをコピー する] チェック ボックスをオンにします。 次に、保存を選択します。

  6. デバイスが接続されたときに Windows が更新されたデバイス メタデータを読み取るようにプリンターを再接続します。

Troubleshooting

問題: 既定のトースト通知が表示されない

期待されるときに既定の印刷通知が表示されない場合...

  • 考えられる原因: テスト署名が有効になっていません。 有効にする方法については、この記事の「デバッグ」セクションを参照してください。

  • 考えられる原因: トースト通知はドメイン ポリシーによって無効になります。 ドメインを離れ、もう一度やり直してください。

  • 考えられる原因: プリンターに DriverEvents が実装されていません。 v4 ドライバーが Bidi および DriverEvents をサポートしていることを確認します。 詳細については、「 カスタマイズされた UI のドライバーサポート」を参照してください。

  • 考えられる原因: 本機のプリンターキューに最近のジョブがありません。 画面の右下隅にプリンター アイコンが表示されていることを確認します。 そうでない場合は、別の印刷ジョブを送信します。

  • 考えられる原因: バックグラウンド タスク (IBackgroundTask) のエントリ ポイントは、フォアグラウンド アプリと同じプロジェクト内にあります。 このシナリオは許可されていません。 バックグラウンド タスク ハンドラーのまったく新しいクラスを分離します。

  • 考えられる原因: アプリ内の通知のエントリ ポイントであるクラスがマニフェストまたはデバイスメタデータで正しく指定されていないため、アプリはバックグラウンド ホスト内でクラッシュし、トーストは表示されません。 次の問題を確認してください。

    • マニフェスト デザイナーの [ 宣言 ] タブでエントリ ポイントが正しく指定されていることを確認します。 これは、C# および C++ の Namespace.ClassName の形式である必要があります。 JavaScript の場合は、.js ファイルへの相対ディレクトリ パスにする必要があります。

    • JavaScript アプリは、完了後に close() を呼び出す必要があります。

    • C# クラスは Windows.ApplicationModel.Background.IBackgroundTask を実装する必要があり、パブリック void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance) メソッドを持っている必要があります。

    • C++ クラスは Windows::ApplicationModel::Background::IBackgroundTask を実装する必要があり、 virtual void Run(Windows::ApplicationModel::Background::IBackgroundTaskInstance^ taskInstance) メソッドを持っている必要があります。