ファイルのアクティブ化の処理
重要な API
- Windows.ApplicationModel.Activation.FileActivatedEventArgs
- Windows.UI.Xaml.Application.OnFileActivated
アプリは、特定のファイルの種類の既定のハンドラーとして登録することができます。 Windows デスクトップ アプリケーションと ユニバーサル Windows プラットフォーム (UWP) アプリの両方を、既定のファイル ハンドラーとして登録できます。 ユーザーが特定のファイルの種類の既定のハンドラーとしてアプリを選択した場合、その種類のファイルが起動されるとアプリがアクティブになります。
その種類のファイルに対するすべてのファイル起動を処理する場合にのみ、ファイルの種類に登録することをお勧めします。 アプリでファイルの種類のみを内部的に使用する必要がある場合は、既定のハンドラーとして登録する必要はありません。 ファイルの種類に登録する場合は、そのファイルの種類に対してアプリをアクティブ化するときに期待される機能をエンド ユーザーに提供する必要があります。 たとえば、画像ビューアー アプリは、.jpg ファイルを表示するために登録できます。 ファイルの関連付けの詳細については、「ファイルの種類と URI の Guidelines」を参照してください。
これらの手順では、カスタム ファイルの種類 .alsdk に登録する方法と、ユーザーが .alsdk ファイルを起動したときにアプリをアクティブ化する方法を示します。
注 UWP アプリでは、組み込みのアプリとオペレーティング システムで使うために、特定の URI とファイル拡張子が予約されています。 予約済みの URI またはファイル拡張子でアプリを登録しようとすると無視されます。 詳細については、「 予約済みのファイルと URI スキームの名前を参照してください。
手順 1: パッケージ マニフェストで拡張ポイントを指定する
アプリは、パッケージ マニフェストに一覧表示されているファイル拡張子に対してのみアクティブ化イベントを受け取ります。 アプリが .alsdk
拡張子を持つファイルを処理することを示す方法を次に示します。
ソリューション エクスプローラーで package.appxmanifest をダブルクリックしてマニフェスト デザイナーを開きます。 Declarations タブを選択し、Available Declarations ドロップダウンで File Type Associations を選択し、Add をクリックします。 ファイルの関連付けによって使用される識別子の詳細については、「 プログラム識別子 」を参照してください。
マニフェスト デザイナーに入力できる各フィールドの簡単な説明を次に示します。
フィールド | Description |
---|---|
表示名 | ファイルの種類のグループの表示名を指定します。 表示名は、コントロール パネルの Set Default Programs でファイルの種類を識別するために使用されます。 |
ロゴ | デスクトップとコントロール パネルの既定のプログラムの設定で、ファイルの種類を識別するために使用するロゴを指定します。 ロゴが指定されていない場合は、アプリケーションの小さなロゴが使用されます。 |
ヒント | ファイルの種類のグループにinfo ヒントを指定します。 このツール ヒントのテキストは、ユーザーがこの種類のファイルのアイコンにカーソルを合わせると表示されます。 |
名前 | 同じ表示名、ロゴ、ヒント、および編集フラグを共有するファイルの種類のグループの名前を選択します。 アプリの更新間で同じままにできるグループ名を選択します。 注 名前はすべて小文字である必要があります。 |
コンテンツの種類 | 特定のファイルの種類の MIME コンテンツ タイプ ( image/jpeg など) を指定します。 許可されるコンテンツ タイプに関する重要な注意事項: パッケージ マニフェストに入力できない MIME コンテンツ タイプのアルファベット順の一覧です。これらは予約済みまたは禁止されているためです。 application/force-download、 application/octet-stream、 application/unknown、 application/x-msdownload。 |
ファイルの種類 | 登録するファイルの種類を指定し、前にピリオド (例: ".jpeg") を付けます。 予約済みファイルの種類と禁止されているファイルの種類:予約済みまたは禁止されているため、UWP アプリに登録できない組み込みアプリのファイルの種類のアルファベット順の一覧については、「予約済み URI スキーム名とファイルの種類」を参照してください。 |
- [名前] として「
alsdk
」と入力します。 - File Type として「
.alsdk
」と入力します。 - [ロゴ] に「images\Icon.png」と入力します。
- 変更を package.appxmanifest に保存するには、Ctrl キーを押しながら S キーを押します。
上記の手順では、次のような Extension 要素をパッケージ マニフェストに追加します。 windows.fileTypeAssociation カテゴリは、アプリが.alsdk
拡張子を持つファイルを処理することを示します。
<Extensions>
<uap:Extension Category="windows.fileTypeAssociation">
<uap:FileTypeAssociation Name="alsdk">
<uap:Logo>images\icon.png</uap:Logo>
<uap:SupportedFileTypes>
<uap:FileType>.alsdk</uap:FileType>
</uap:SupportedFileTypes>
</uap:FileTypeAssociation>
</uap:Extension>
</Extensions>
手順 2: 適切なアイコンを追加する
ファイルの種類の既定値となるアプリには、システム全体のさまざまな場所にアイコンが表示されます。 たとえば、次のアイコンが表示されます。
- Windows エクスプローラーのアイテム ビュー、コンテキスト メニュー、リボン
- 既定のプログラムコントロール パネル
- ファイル ピッカー
- スタート画面の検索結果
プロジェクトに 44 x 44 アイコンを含め、ロゴをそれらの場所に表示できるようにします。 アプリタイルのロゴの外観に合わせて、アイコンを透明にするのではなく、アプリの背景色を使用します。 余白を埋め込まずに、ロゴをエッジまで拡張します。 白い背景でアイコンをテストします。 アイコンの詳細については、タイルアセットとアイコンアセットの Guidelines を参照してください。
手順 3: アクティブ化されたイベントを処理する
OnFileActivated イベント ハンドラーは、すべてのファイルアクティブ化イベントを受け取ります。
protected override void OnFileActivated(FileActivatedEventArgs args)
{
// TODO: Handle file activation
// The number of files received is args.Files.Count
// The name of the first file is args.Files[0].Name
}
Protected Overrides Sub OnFileActivated(ByVal args As Windows.ApplicationModel.Activation.FileActivatedEventArgs)
' TODO: Handle file activation
' The number of files received is args.Files.Size
' The name of the first file is args.Files(0).Name
End Sub
void App::OnFileActivated(Windows::ApplicationModel::Activation::FileActivatedEventArgs const& args)
{
// TODO: Handle file activation.
auto numberOfFilesReceived{ args.Files().Size() };
auto nameOfTheFirstFile{ args.Files().GetAt(0).Name() };
}
void App::OnFileActivated(Windows::ApplicationModel::Activation::FileActivatedEventArgs^ args)
{
// TODO: Handle file activation
// The number of files received is args->Files->Size
// The name of the first file is args->Files->GetAt(0)->Name
}
Note
ファイル コントラクトを介して起動した場合、戻るボタンが使われたときは、アプリの以前のコンテンツに戻るのではなく、アプリを起動した画面に戻るようにする必要があります。
新しいページを開くアクティブ化イベントごとに、新しい XAML フレームを作成することをお勧めします。 こうすると、新しい XAML フレームのナビゲーション バックスタックに、中断されたときに現在のウィンドウに表示されていた以前のコンテンツが含まれなくなります。 起動コントラクトとファイル コントラクトで単一 XAML フレームを使うことにした場合は、新しいページに移動する前にフレームのナビゲーション ジャーナルにあるページをクリアする必要があります。
ファイル アクティブ化によってアプリを起動するときは、アプリの先頭ページに戻ることができる UI を含めることを検討してください。
解説
受信するファイルは、信頼されていないソースから取得される可能性があります。 アクションを実行する前に、ファイルの内容を検証することをお勧めします。