Dostęp do danych i plików w aplikacjach Modern UI - Wyświetlanie ostatnio używanych plików i folderów
Tłumaczenie na podstawie How to track recently used files and folders (Moder UI style apps using C#/VB/C++ and XAML): Konrad Bojarczuk
Opublikowano: 2012-07-23
W tym odcinku dowiesz się, w jaki sposób śledzić często używane przez użytkowników pliki, dzięki dodaniu ich do listy najczęściej używanych przez daną aplikację. System Windows zarządza listą MostRecentlyUsedList. Sortuje jej pozycje, według czasu ostatniego użytkowania, usuwając najstarsze, gdy zostanie osiągnięty limit 25. Każda aplikacja typu Moder UI posiada swoją własną listę MostRecentlyUsedList.
Zazwyczaj, lista najczęściej używanych plików Twojej aplikacji (MRU) będzie przydatna do śledzenia tych plików, które były niedawno używane przez użytkowników, ale może być również używana do śledzenia folderów. Możesz przechowywać zarówno pliki, jak i foldery w liście najczęściej używanych pozycji (MRU). Elementy są przechowywane jako obiekty IStorageItem, co oznacza, iż obiekty StorageFile (reprezentujące pliki) i obiekty StorageFolder (reprezentujące foldery) mogą być dodane do MRU.
Wymagania
Warto, abyś zapoznał się z następującymi publikacjami:
- File access and permissions in Moder UI style apps – wyjaśnia, do których plików i lokalizacji Twoja aplikacja ma domyślny dostęp oraz przedstawia, w jaki sposób aplikacja może uzyskać dodatkowy dostęp do innych plików i lokalizacji,
- Dostęp do plików przy użyciu przeglądarki – wyjaśnia, jak umożliwić użytkownikom wybór plików używanych przez aplikację. Wybrane pliki są często tymi samymi plikami, z których użytkownicy nieustannie korzystają.
Powiązane przykłady:
- przykład File access sample,
- przykład File picker sample.
Dodaj wybrany plik do MRU
Pliki wybierane przez użytkowników są zazwyczaj często używane. Powinieneś rozważyć dodanie tych plików do listy najczęściej używanych MRU. Postępując według poniższych wskazówek, możesz dodać pliki do MRU, zaraz po tym, jak zostaną wybrane przez użytkownika:
- Znajdź fragment kodu Twojej aplikacji, który odpowiada za umożliwienie użytkownikom wyboru plików i/lub folderów. Jeśli nie jesteś pewny, gdzie dokładnie znajduje się dana część kodu lub nie wiesz, jak używać okna wyboru plików, zobacz Dostęp do plików przy użyciu przeglądarki.
Na przykład, jeśli pozwalasz użytkownikom na wybór jednego pliku, to kod źródłowy powinien być podobny do następującego:
C#
using Windows.Storage;
using Windows.Storage.Pickers;
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.ReplaceAll([".png", ".jpg", ".jpeg"]);
// Otwórz okno wyboru pliku by użytkownik mógł wybrać plik
StorageFile pickedFile = await openPicker.PickSingleFileAsync();
Jeżeli asynchroniczne wywołanie zwraca (PickSingleFileAsync w powyższym przykładzie) plik, wybrany przez użytkownika, to jest on zwrócony jako StorageFile i przechowywany w zmiennej pickedFile.
Jeśli pozwalasz użytkownikom na wybór folderów zamiast plików, kod źródłowy użyje PickSingleFolderAsync. Wybrany folder jest następnie zwracany jako StorageFolder.
- Dodaj wybrany plik do listy najczęściej używanych elementów (MRU) przez dodanie poniższego kodu zaraz po asynchronicznym wywołaniu:
C#
String mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(pickedFile, "profile pic");
Metoda MostRecentlyUsedList.Add jest przeciążona. W przykładzie używamy Add(IStorageItem, String), aby powiązać metadane z plikiem. Ustawienie metadanych pozwala na przechowywanie dodatkowych informacji, takich jak przeznaczenie pliku. W przykładzie określamy przeznaczenie pliku poprzez ustawienie metadanych na „profil pic”. Możesz również dodawać pliki do MRU bez używania metadanych poprzez wywołanie Add(IStorageItem).
Gdy dodajesz pozycję do listy MRU, metoda zwraca unikalny string identyfikacyjny, zwany tokenem, który jest używany do odzyskania pliku. W przykładzie przechowujemy ten token w lokalnej zmiennej mruTorekn, ale nie robimy z nim nic ponadto.
Porada - W związku z koniecznością użycia token w celu odzyskania elementu z listy MRU, powinieneś rozważyć jego zapis w aplikacji do późniejszego wykorzystania. Na przykład, jeśli Twoja aplikacja dodaje profil pic do listy MRU (tak, jak w przykładzie) możesz zapisać token do listy w danych aplikacji, gdzie śledzisz zdjęcia profilu użytkownika. Więcej inforamacji o danych aplikacji możesz dowiedzieć się w Managing application data.
W tej chwili Twój kod powinien wyglądać następująco:
C#
// Otwórz okno wyboru by użytkownik mógł wybrać plik
StorageFile pickedFile = await openPicker.PickSingleFileAsync();
// Dodaj wybrany plik do listy MRU
String mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(pickedFile, pickedFile.Name);
Użyj tokenów do pobrania elementów listy z MRU
Aby pobrać element z MostRecentlyUsedList potrzebujesz tokena dla tej pozycji. Powinieneś używać metody zgodnej z odpowiednim typem elementu, który chcesz pobrać:
- pobierz plik jako StorageFile, używając GetFileAsync,
- pobierz folder jako StorageFolder, używając GetFolderAsync,
- pobierz IStorageItem, który reprezentuje plik lub folder, używając GetItemAsync.
Na przykład, uzyskujemy token dla pierwszej pozycji - pliku w naszej liście MRU i wtedy używamy tego tokena do pobrania StorageFile, reprezentującego plik, używając poniższego kodu:
C#
using Windows.Storage;
using Windows.Storage.AccessCache;
String mruFirstToken = StorageApplicationPermissions.MostRecentlyUsedList.Entries.First.Token;
StorageFile retrievedFile = await StorageApplicationPermissions.MostRecentlyUsedList.GetFileAsync(mruFirstToken);
W przykładzie wiemy, że pierwsza pozycja jest plikiem, ponieważ dodaliśmy tylko jeden plik do MostRecentlyUsedList.
Pobierz tokeny dla wszystkich plików w MRU.
Możesz pobrać tokeny dla każdej pozycji na liście poprzez iterowanie wpisów, jak poniżej:
C#
using Windows.Storage.AccessCache;
AccessListEntryView mruEntries = StorageApplicationPermissions.MostRecentlyUsedList.Entries;
if (mruEntries.Size > 0) {
foreach (AccessListEntry entry in mruEntries) {
String mruToken = entry.Token;
// Kontynuuj przetwarzanie wpisu MRU
}
} else {
// Zajmij się pustym elementem MRU
}
AccessListEntryView umożliwia iteracyjne sprawdzenie elementów listy MRU. Elementy zwracane są strukturami AccessListEntry, zawierającymi token i metadane dla danego wpisu. Wpisy te nie zawierają elementu i nie mogą być używane do jego bezpośredniego pobrania.
Zamiast tego, możesz użyć AccessListEntry, aby pobrać token dla skojarzonego elementu i wtedy pobrać go, używając jednej z metod, opisanych w poprzedniej części artykułu - „Użyj tokenów do pobrania elementów listy z MRU”. W przykładzie przechowujemy token dla każdego wpisu w lokalnej zmiennej mruToken, ale nie robimy z nim nic innego.
Metadane przechowywane w AccessListEntry to ciąg dodatkowych informacji o tej pozycji. Możesz sprecyzować te informacje, gdy dodajesz pozycję do MostRecentlyUsedList.
Uwagi:
1. Usuwanie elementów z MRU, gdy limit 25 pozycji zostanie osiągnięty.
W sytuacji, gdy limit 25 pozycji na liście zostaje osiągnięty i spróbujesz dodać nową, system Windows automatycznie usunie najstarszy element (pozycję, która była używana dawno temu). To sprawia, że nie musisz ręcznie usuwać żadnych pozycji przed dodaniem nowej, nawet jeśli MRU zawiera maksymalną liczbę pozycji.
2. Utrzymanie dostępu do plików i folderów poza 25-elementowym limitem.
Oprócz listy ostatnio używanych, Twoja aplikacja posiada również listę przyszłego dostępu (FutureAccessList). Możesz jej używać w celu zarządzania dostępem do plików i folderów, które mogą być niedostępne w inny sposób.
Gdy użytkownik wybierze plik lub folder, powinieneś rozważyć dodanie tego elementu do listy MostRecentlyUsedList i FutureAccessList. Dodanie pliku lub folderu do FutureAccessList umożliwia uzyskanie zapewnienia, że Twoja aplikacja zachowuje dostęp do elementu, nawet jeśli użytkownik nie korzysta z niego zbyt często.
Praca z FutureAccessList różni się od MRU w kilku istotnych kwestiach:
- FutureAccessList może zawierać do 1000 elementów,
- w przeciwieństwie do MRU system Windows nie zarządza FutureAccessList za Ciebie. Gdy zostanie osiągnięty limit 1000 elementów musisz ręcznie usunąć pozycję przed dodaniem nowej. Możesz to zrobić, używając metody Remove.
Wszystkie aplikacje typu Moder UI domyślnie posiadają własne MostRecentlyUsedList i FutureAccessList