ホームグループ コンテンツへのアクセス
重要な API
ユーザーのホームグループ フォルダーに格納されているコンテンツ (画像、音楽、ビデオなど) にアクセスします。
前提条件
ユニバーサル Windows プラットフォーム (UWP) アプリの非同期プログラミングについての理解
C# や Visual Basic での非同期アプリの作成方法については、「C# または Visual Basic での非同期 API の呼び出し」をご覧ください。 C++ での非同期アプリの作成方法については、「C++ での非同期プログラミング」をご覧ください。
アプリ機能の宣言
ホームグループ コンテンツにアクセスするには、ユーザーのコンピューターにホームグループがセットアップされ、アプリに picturesLibrary、musicLibrary、videosLibrary のうちの少なくとも 1 つの機能が備わっている必要があります。 アプリは、ホームグループ フォルダーにアクセスすると、アプリのマニフェストで宣言されている機能に対応するライブラリだけを参照します。 詳しくは、「ファイル アクセス許可」をご覧ください。
Note
ホームグループのドキュメント ライブラリのコンテンツは、アプリのマニフェストで宣言されている機能や、ユーザーの共有設定にかかわらず、アプリからは参照できません。
ファイル ピッカーの使い方についての理解
ホームグループのファイルやフォルダーにアクセスするには、通常、ファイル ピッカーを使います。 ファイル ピッカーの使い方については、「ピッカーでファイルやフォルダーを開く」をご覧ください。
ファイルとフォルダーのクエリについての理解
ホームグループのファイルやフォルダーを列挙するには、クエリを使うことができます。 ファイルとフォルダーのクエリについて詳しくは、「ファイルとフォルダーの列挙と照会」をご覧ください。
ホームグループでファイル ピッカーを開く
以下の手順に従って、ユーザーがホームグループのファイルとフォルダーを選ぶことができるファイル ピッカーのインスタンスを開きます。
ファイル ピッカーを作成してカスタマイズします。
FileOpenPicker を使ってファイル ピッカーを作成し、ピッカーの SuggestedStartLocation を PickerLocationId.HomeGroup に設定します。 または、ユーザーとアプリに関連するその他のプロパティを設定します。 ファイル ピッカーのカスタマイズ方法を判断するためのガイドラインについては、「ファイル ピッカーのガイドラインとチェック リスト」をご覧ください。
次の例では、ホームグループで開かれ、すべての種類のファイルを含み、ファイルをサムネイル画像として表示するファイル ピッカーを作成しています。
Windows.Storage.Pickers.FileOpenPicker picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.HomeGroup; picker.FileTypeFilter.Clear(); picker.FileTypeFilter.Add("*");
ファイル ピッカーを表示して、選ばれたファイルを処理します。
ファイル ピッカーを作成してカスタマイズしたら、ユーザーが 1 つのファイルを選べるように FileOpenPicker.PickSingleFileAsync を呼び出すか、複数のファイルを選べるように FileOpenPicker.PickMultipleFilesAsync を呼び出します。
次の例では、ファイル ピッカーを表示して、ユーザーが 1 つのファイルを選べるようにしています。
Windows.Storage.StorageFile file = await picker.PickSingleFileAsync(); if (file != null) { // Do something with the file. } else { // No file returned. Handle the error. }
ホームグループでファイルを検索する
このセクションでは、ユーザーが指定したクエリ語句に一致するホームグループ項目を見つける方法を示します。
ユーザーからクエリ語句を取得します。
ここでは、ユーザーが
searchQueryTextBox
という名前の TextBox コントロールに入力したクエリ語句を取得します。string queryTerm = this.searchQueryTextBox.Text;
クエリ オプションと検索フィルターを設定します。
クエリ オプションは、検索結果をどのように並べ替えるかを決めます。検索フィルターは、どの項目が検索結果に含まれるかを決めます。
次の例は、検索結果をまず関連性で、次に更新日で並べ替えるクエリ オプションを設定します。 検索フィルターは、ユーザーが前の手順で入力したクエリ語句です。
Windows.Storage.Search.QueryOptions queryOptions = new Windows.Storage.Search.QueryOptions (Windows.Storage.Search.CommonFileQuery.OrderBySearchRank, null); queryOptions.UserSearchFilter = queryTerm.Text; Windows.Storage.Search.StorageFileQueryResult queryResults = Windows.Storage.KnownFolders.HomeGroup.CreateFileQueryWithOptions(queryOptions);
クエリを実行し、結果を処理します。
次の例は、ホームグループで検索クエリを実行し、一致するファイルの名前を文字列の一覧として保存します。
System.Collections.Generic.IReadOnlyList<Windows.Storage.StorageFile> files = await queryResults.GetFilesAsync(); if (files.Count > 0) { outputString += (files.Count == 1) ? "One file found\n" : files.Count.ToString() + " files found\n"; foreach (Windows.Storage.StorageFile file in files) { outputString += file.Name + "\n"; } }
ホームグループで特定のユーザーの共有ファイルを検索する
このセクションでは、特定のユーザーによって共有されているホームグループ ファイルを見つける方法を示します。
ホームグループ ユーザーのコレクションを取得します。
ホームグループの第 1 レベルのフォルダーは、それぞれが個々のホームグループ ユーザーを表しています。 そのため、ホームグループ ユーザーのコレクションを取得するには、GetFoldersAsync を呼び出し、第 1 レベルのホームグループ フォルダーを取得します。
System.Collections.Generic.IReadOnlyList<Windows.Storage.StorageFolder> hgFolders = await Windows.Storage.KnownFolders.HomeGroup.GetFoldersAsync();
目的のユーザーのフォルダーを見つけ、そのユーザーのフォルダーをスコープにしたファイル クエリを作成します。
次の例は、取得したフォルダーを反復処理して、目的のユーザーのフォルダーを見つけます。 次に、クエリ オプションを設定して、フォルダー内のすべてのファイルを検索し、まずは関連性で、次に更新日で並べ替えます。 この例では、見つかったファイルの数とファイルの名前を報告する文字列を作成します。
bool userFound = false; foreach (Windows.Storage.StorageFolder folder in hgFolders) { if (folder.DisplayName == targetUserName) { // Found the target user's folder, now find all files in the folder. userFound = true; Windows.Storage.Search.QueryOptions queryOptions = new Windows.Storage.Search.QueryOptions (Windows.Storage.Search.CommonFileQuery.OrderBySearchRank, null); queryOptions.UserSearchFilter = "*"; Windows.Storage.Search.StorageFileQueryResult queryResults = folder.CreateFileQueryWithOptions(queryOptions); System.Collections.Generic.IReadOnlyList<Windows.Storage.StorageFile> files = await queryResults.GetFilesAsync(); if (files.Count > 0) { string outputString = "Searched for files belonging to " + targetUserName + "'\n"; outputString += (files.Count == 1) ? "One file found\n" : files.Count.ToString() + " files found\n"; foreach (Windows.Storage.StorageFile file in files) { outputString += file.Name + "\n"; } } } }
ホームグループからビデオをストリーミングする
ホームグループからビデオ コンテンツをストリーミングするには、次の手順を実行します。
アプリに MediaElement を含めます。
MediaElement は、アプリのオーディオ コンテンツとビデオ コンテンツを再生します。 オーディオとビデオの再生について詳しくは、「カスタム トランスポート コントロールを作成する」と「オーディオ、ビデオ、およびカメラ」をご覧ください。
<Grid x:Name="Output" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Row="1"> <MediaElement x:Name="VideoBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0" Width="400" Height="300"/> </Grid>
ファイル ピッカーをホームグループで開き、アプリでサポートされている形式のビデオ ファイルを含めるフィルターを適用します。
次の例では、ファイル オープン ピッカーに .mp4 ファイルと .wmv ファイルが含まれます。
Windows.Storage.Pickers.FileOpenPicker picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail; picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.HomeGroup; picker.FileTypeFilter.Clear(); picker.FileTypeFilter.Add(".mp4"); picker.FileTypeFilter.Add(".wmv"); Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();
ユーザーが選んだファイルを読み取りアクセスで開き、ファイル ストリームを MediaElement のソースとして設定して、ファイルを再生します。
if (file != null) { var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); VideoBox.SetSource(stream, file.ContentType); VideoBox.Stop(); VideoBox.Play(); } else { // No file selected. Handle the error here. }