Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přidejte do odpovídajících knihoven existující složky hudby, obrázků nebo videí. Můžete taky odebrat složky z knihoven, získat seznam složek v knihovně a zjišťovat uložené fotky, hudbu a videa.
Knihovna je virtuální kolekce složek, která ve výchozím nastavení obsahuje známou složku a všechny další složky, které uživatel přidal do knihovny pomocí vaší aplikace nebo jedné z předdefinovaných aplikací. Například knihovna Obrázky obsahuje ve výchozím nastavení známou složku Obrázky. Uživatel může přidávat složky do knihovny Obrázky nebo je z nich odebírat pomocí aplikace nebo integrované aplikace Fotky.
Požadavky
principy asynchronního programování pro aplikace univerzální platformy Windows (UPW)
Dozvíte se, jak psát asynchronní aplikace v jazyce C# nebo Visual Basic, viz Volání asynchronních rozhraní API v jazyce C# nebo Visual Basic. Informace o tom, jak psát asynchronní aplikace v jazyce C++, najdete v tématu asynchronní programování v jazyce C++.
Přístupová oprávnění k umístění
V sadě Visual Studio otevřete soubor manifestu aplikace v Návrháři manifestu. Na stránce Možnosti vyberte knihovny, které vaše aplikace spravuje.
- Hudební knihovna
- Knihovna obrázků
- Knihovna videí
Další informace najdete v tématu Oprávnění k přístupu k souborům.
Získání odkazu na knihovnu
Poznámka:
Nezapomeňte deklarovat příslušnou funkci. Další informace najdete v deklarací funkcích aplikace .
Pokud chcete získat odkaz na knihovnu Hudba, Obrázky nebo Video uživatele, zavolejte metodu StorageLibrary.GetLibraryAsync. Zadejte odpovídající hodnotu z výčtu ZnámýLibraryId.
var myPictures = await Windows.Storage.StorageLibrary.GetLibraryAsync(Windows.Storage.KnownLibraryId.Pictures);
Získání seznamu složek v knihovně
Chcete-li získat seznam složek v knihovně, získejte hodnotu StorageLibrary.Folders vlastnost.
using Windows.Foundation.Collections;
IObservableVector<Windows.Storage.StorageFolder> myPictureFolders = myPictures.Folders;
Získání složky v knihovně, ve které se ve výchozím nastavení ukládají nové soubory
Chcete-li získat složku v knihovně, kde jsou nové soubory uloženy ve výchozím nastavení, získejte hodnotu StorageLibrary.SaveFolder vlastnost.
Windows.Storage.StorageFolder savePicturesFolder = myPictures.SaveFolder;
Přidání existující složky do knihovny
Chcete-li přidat složku do knihovny, zavoláte StorageLibrary.RequestAddFolderAsync. Vezměme si jako příklad knihovnu Obrázky, při zavolání této metody se uživateli zobrazí výběr složky s tlačítko Přidat tuto složku do Obrázků. Pokud uživatel vybere složku, zůstane složka v původním umístění na disku a stane se položkou ve vlastnosti StorageLibrary.Folders (a v integrované aplikaci Fotky), ale složka se v Průzkumníku souborů nezobrazí jako podřízená složka Obrázky.
Windows.Storage.StorageFolder newFolder = await myPictures.RequestAddFolderAsync();
Odebrání složky z knihovny
Pokud chcete odebrat složku z knihovny, zavolejte metodu StorageLibrary.RequestRemoveFolderAsync a zadejte složku, která se má odebrat. K výběru složky, kterou chcete odebrat, můžete použít StorageLibrary.Folders a ovládací prvek ListView (nebo podobný).
Když zavoláte StorageLibrary.RequestRemoveFolderAsync, zobrazí se uživateli potvrzovací dialogové okno s oznámením, že se složka "už nebude zobrazovat v obrázcích, ale neodstraní se". To znamená, že složka zůstane v původním umístění na disku, odebere se z vlastnosti StorageLibrary.Folders a už nebude součástí integrované aplikace Fotky.
Následující příklad předpokládá, že uživatel vybral složku k odebrání z ovládacího prvku ListView názvem lvPictureFolders.
bool result = await myPictures.RequestRemoveFolderAsync(folder);
Oznámení o změnách seznamu složek v knihovně
Pokud chcete dostávat oznámení o změnách seznamu složek v knihovně, zaregistrujte obslužnou rutinu pro událost StorageLibrary.DefinitionChanged knihovny.
myPictures.DefinitionChanged += MyPictures_DefinitionChanged;
void HandleDefinitionChanged(Windows.Storage.StorageLibrary sender, object args)
{
// ...
}
Složky knihovny médií
Zařízení poskytuje uživatelům a aplikacím pět předdefinovaných umístění pro ukládání mediálních souborů. Předdefinované aplikace ukládají média vytvořená uživatelem i stažená média v těchto umístěních.
Umístění:
složka Obrázky. Obsahuje obrázky.
složka Camera Roll. Obsahuje fotky a video z integrované kamery.
Uložené obrázky složka. Obsahuje obrázky, které uživatel uložil z jiných aplikací.
složka Hudba. Obsahuje skladby, podcasty a zvukové knihy.
složku Video. Obsahuje videa.
Uživatelé nebo aplikace mohou také ukládat mediální soubory mimo složky knihovny médií na kartě SD. Pokud chcete na kartě SD spolehlivě najít multimediální soubor, naskenujte obsah karty SD nebo požádejte uživatele, aby soubor našel pomocí nástroje pro výběr souborů. Další informace najdete v tématu Přístup kkarty SD .
Dotazy do knihoven médií
Pokud chcete získat kolekci souborů, zadejte knihovnu a požadovaný typ souborů.
using Windows.Storage;
using Windows.Storage.Search;
private async void getSongs()
{
QueryOptions queryOption = new QueryOptions
(CommonFileQuery.OrderByTitle, new string[] { ".mp3", ".mp4", ".wma" });
queryOption.FolderDepth = FolderDepth.Deep;
Queue<IStorageFolder> folders = new Queue<IStorageFolder>();
var files = await KnownFolders.MusicLibrary.CreateFileQueryWithOptions
(queryOption).GetFilesAsync();
foreach (var file in files)
{
// do something with the music files
}
}
Výsledky dotazů zahrnují interní i vyměnitelné úložiště.
Uživatelé můžou ve výchozím nastavení ukládat soubory na volitelné kartě SD. Aplikace se ale můžou odhlásit z povolení ukládání souborů na kartě SD. V důsledku toho je možné knihovny médií rozdělit mezi interní úložiště zařízení a kartu SD.
Abyste tuto možnost zvládli, nemusíte psát další kód. Metody v oboru názvů Windows.Storage , které dotazují známé složky transparentně kombinují výsledky dotazu z obou umístění. Abyste získali tyto kombinované výsledky, nemusíte v souboru manifestu aplikace zadávat schopnost removableStorage.
Představte si stav úložiště zařízení zobrazený na následujícím obrázku:
Pokud se dotazujete na obsah knihovny obrázků voláním await KnownFolders.PicturesLibrary.GetFilesAsync(), výsledky zahrnují internalPic.jpg i SDPic.jpg.
Práce s fotografiemi
Na zařízeních, kde fotoaparát ukládá obrázek s nízkým rozlišením i obrázek s vysokým rozlišením každého obrázku, vrátí hluboké dotazy jenom obrázek s nízkým rozlišením.
Složka Fotoaparát a složka Uložené obrázky nepodporují hloubkové dotazy.
Otevření fotky v aplikaci, která ji zachytila
Pokud chcete uživateli nechat fotku znovu otevřít později v aplikaci, která ji zachytila, můžete CreatorAppId uložit s metadaty fotky pomocí kódu podobného následujícímu příkladu. V tomto příkladu je testPhoto jako StorageFile.
IDictionary<string, object> propertiesToSave = new Dictionary<string, object>();
propertiesToSave.Add("System.CreatorOpenWithUIOptions", 1);
propertiesToSave.Add("System.CreatorAppId", appId);
testPhoto.Properties.SavePropertiesAsync(propertiesToSave).AsyncWait();
Přidání souboru do knihovny médií pomocí metod streamu
Když přistupujete ke knihovně médií pomocí známé složky, jako je KnownFolders.PictureLibrary, a pomocí metod streamování přidáte soubor do knihovny médií, musíte zavřít všechny streamy, které váš kód otevře. Jinak tyto metody nezvládnou přidat soubor do knihovny médií, jak se očekávalo, protože alespoň jeden datový proud stále drží popisovač souboru.
Když například spustíte následující kód, soubor se do knihovny médií nepřidá. V řádku kódu using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))metody OpenAsync a GetOutputStreamAt otevřou datový proud. V důsledku použití příkazu using se však uvolní pouze datový proud otevřený metodou GetOutputStreamAt. Druhý datový proud zůstane otevřený a zabrání uložení souboru.
StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = (await sourceFile.OpenReadAsync()).GetInputStreamAt(0))
{
using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
{
await RandomAccessStream.CopyAndCloseAsync(sourceStream, destinationStream);
}
}
Pokud chcete úspěšně přidat soubor do knihovny médií pomocí metod streamu, nezapomeňte zavřít všechny streamy, které se otevře v kódu, jak je znázorněno v následujícím příkladu.
StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = await sourceFile.OpenReadAsync())
{
using (var sourceInputStream = sourceStream.GetInputStreamAt(0))
{
using (var destinationStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite))
{
using (var destinationOutputStream = destinationStream.GetOutputStreamAt(0))
{
await RandomAccessStream.CopyAndCloseAsync(sourceInputStream, destinationStream);
}
}
}
}