Доступ к содержимому домашней группы

Важные API

Доступ к содержимому, хранящимся в папке домашней группы пользователя, включая изображения, музыку и видео.

Необходимые компоненты

  • Общее представление об асинхронном программировании для приложений универсальной платформы Windows (UWP).

    Вы можете узнать, как писать асинхронные приложения в C# или Visual Basic, см . статью "Вызов асинхронных API" в C# или Visual Basic. Сведения о написании асинхронных приложений в C++см. в статье "Асинхронное программирование" в C++.

  • Объявления возможностей приложения

    Чтобы получить доступ к содержимому HomeGroup, компьютер пользователя должен иметь домашнюю группу, и приложение должно иметь по крайней мере одну из следующих возможностей: picturesLibrary, musicLibrary или видеоLibrary. Когда приложение обращается к папке HomeGroup, оно увидит только библиотеки, соответствующие возможностям, объявленным в манифесте приложения. Дополнительные сведения см. в разделе "Разрешения на доступ к файлам".

    Примечание.

     Содержимое библиотеки документов домашней группы невидимо для вашего приложения независимо от возможностей, объявленных в манифесте, и настроек общего доступа пользователя.  

  • Использование средств выбора файлов

    Обычно средство выбора файлов используется для доступа к файлам и папкам в домашней группе. Сведения об использовании средства выбора файлов см. в разделе "Открыть файлы и папки" с помощью средства выбора.

  • Запросы файлов и папок

    Запросы можно использовать для перечисления файлов и папок в домашней группе. Дополнительные сведения о запросах к файлам и папкам см. в разделе "Перечисление и запрос файлов и папок".

Открытие средства выбора файлов в домашней группе

Выполните следующие действия, чтобы открыть экземпляр средства выбора файлов, который позволяет пользователю выбирать файлы и папки из домашней группы:

  1. Создание и настройка средства выбора файлов

    Используйте 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("*");
    
  2. Отобразите средство выбора файлов и обработайте выбранный файл.

    После создания и настройки средства выбора файлов пользователь может выбрать один файл, вызвав 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.
    }   
    

Поиск домашней группы для файлов

В этом разделе показано, как найти элементы домашней группы, соответствующие термину запроса, предоставленному пользователем.

  1. Получите термин запроса от пользователя.

    Здесь мы получаем термин запроса, введенный пользователем в элемент searchQueryTextBoxуправления TextBox:

    string queryTerm = this.searchQueryTextBox.Text;    
    
  2. Задайте параметры запроса и фильтр поиска.

    Параметры запроса определяют порядок сортировки результатов поиска, а фильтр поиска определяет, какие элементы включены в результаты поиска.

    В этом примере задаются параметры запроса, отсортирующие результаты поиска по релевантности, а затем измененная дата. Фильтр поиска — это термин запроса, введенный пользователем на предыдущем шаге:

    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);    
    
  3. Выполните запрос и обработайте результаты.

    В следующем примере выполняется поисковый запрос в домашней группе и сохраняются имена всех соответствующих файлов в виде списка строк.

    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. Получите коллекцию пользователей домашней группы.

    Каждая из папок первого уровня в домашней группе представляет отдельного пользователя HomeGroup. Таким образом, чтобы получить коллекцию пользователей HomeGroup, вызов GetFoldersAsync извлекает папки домашней группы верхнего уровня.

    System.Collections.Generic.IReadOnlyList<Windows.Storage.StorageFolder> hgFolders =
        await Windows.Storage.KnownFolders.HomeGroup.GetFoldersAsync();    
    
  2. Найдите папку нужного пользователя и создайте область запроса файла для папки этого пользователя.

    В следующем примере выполняется итерацию по извлеченным папкам, чтобы найти папку целевого пользователя. Затем он задает параметры запроса, чтобы найти все файлы в папке, отсортировать сначала по релевантности, а затем по дате изменения. В примере создается строка, которая сообщает количество найденных файлов, а также имена файлов.

    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";
                }
            }
        }
    }    
    

Потоковая передача видео из домашней группы

Выполните следующие действия, чтобы потоковая передача видео из домашней группы:

  1. Включите 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>    
    
  2. Откройте средство выбора файлов в домашней группе и примените фильтр, который включает видеофайлы в форматах, поддерживаемых вашим приложением.

    Этот пример включает .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();   
    
  3. Откройте доступ для чтения для файла, выбранного пользователем, и задайте поток файла в качестве источника для 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.
    }