Доступ к содержимому домашней группы
Важные API
Доступ к содержимому, хранящимся в папке домашней группы пользователя, включая изображения, музыку и видео.
Необходимые компоненты
Общее представление об асинхронном программировании для приложений универсальной платформы Windows (UWP).
Вы можете узнать, как писать асинхронные приложения в C# или Visual Basic, см . статью "Вызов асинхронных API" в C# или Visual Basic. Сведения о написании асинхронных приложений в C++см. в статье "Асинхронное программирование" в C++.
Объявления возможностей приложения
Чтобы получить доступ к содержимому HomeGroup, компьютер пользователя должен иметь домашнюю группу, и приложение должно иметь по крайней мере одну из следующих возможностей: picturesLibrary, musicLibrary или видеоLibrary. Когда приложение обращается к папке HomeGroup, оно увидит только библиотеки, соответствующие возможностям, объявленным в манифесте приложения. Дополнительные сведения см. в разделе "Разрешения на доступ к файлам".
Примечание.
Содержимое библиотеки документов домашней группы невидимо для вашего приложения независимо от возможностей, объявленных в манифесте, и настроек общего доступа пользователя.
Использование средств выбора файлов
Обычно средство выбора файлов используется для доступа к файлам и папкам в домашней группе. Сведения об использовании средства выбора файлов см. в разделе "Открыть файлы и папки" с помощью средства выбора.
Запросы файлов и папок
Запросы можно использовать для перечисления файлов и папок в домашней группе. Дополнительные сведения о запросах к файлам и папкам см. в разделе "Перечисление и запрос файлов и папок".
Открытие средства выбора файлов в домашней группе
Выполните следующие действия, чтобы открыть экземпляр средства выбора файлов, который позволяет пользователю выбирать файлы и папки из домашней группы:
Создание и настройка средства выбора файлов
Используйте FileOpenPicker для создания средства выбора файлов, а затем задайте для средства выбора предложениеStartLocation значение 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("*");
Отобразите средство выбора файлов и обработайте выбранный файл.
После создания и настройки средства выбора файлов пользователь может выбрать один файл, вызвав FileOpenPicker.PickSingleFileAsync или несколько файлов, вызвав FileOpenPicker.PickMultipleFilesAsync.
В этом примере отображается средство выбора файлов, чтобы разрешить пользователю выбрать один файл:
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"; } }
Поиск домашней группы для общих файлов определенного пользователя
В этом разделе показано, как найти файлы Домашней группы, к которым предоставлен общий доступ определенному пользователю.
Получите коллекцию пользователей домашней группы.
Каждая из папок первого уровня в домашней группе представляет отдельного пользователя HomeGroup. Таким образом, чтобы получить коллекцию пользователей HomeGroup, вызов GetFoldersAsync извлекает папки домашней группы верхнего уровня.
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. }