S4 Files and Storage

July 7, 2016 | Author: Kristin Silva | Category: Types, Brochures
Share Embed Donate


Short Description

files and storeage...

Description

M4: Files and Storage in Windows Phone 8

Target Agenda | Day 1 Module and Topic | 10-minute breaks after each session / 6060 -minute “meal break”

Planned Duration

1a - Introducing Windows Phone 8 Application Development | Part 1

50:00

1b - Introducing Windows Phone 8 Application Development | Part 2

50:00

2 - Designing Windows Phone Apps

50:00

3 - Building Windows Phone Apps

50:00

4 - Files and Storage on Windows Phone 8

50:00

Meal Break | 60-minutes

60:00

5 - Windows Phone 8 Application Lifecycle

50:00

6 - Background Agents

25:00

7 - Tiles and Lock Screen Notifications

25:00

8 - Push Notifications

30:00

9 - Using Phone Resources on Windows Phone 8

50:00

Target Agenda | Day 1 Module and Topic | 10-minute breaks after each session / 6060 -minute “meal break”

Planned Duration

1a - Introducing Windows Phone 8 Application Development | Part 1

50:00

1b - Introducing Windows Phone 8 Application Development | Part 2

50:00

2 - Designing Windows Phone Apps

50:00

3 - Building Windows Phone Apps

50:00

4 - Files and Storage on Windows Phone 8

50:00

Meal Break | 60-minutes

60:00

5 - Windows Phone 8 Application Lifecycle

50:00

6 - Background Agents

25:00

7 - Tiles and Lock Screen Notifications

25:00

8 - Push Notifications

30:00

9 - Using Phone Resources on Windows Phone 8

50:00

Target Agenda | Day 2 Module and Topic | 10-minute breaks after each session / 6060 -minute “meal break”

Planned Duration

10 - App to App Communication

35:00

11 - Network Communication on Windows Phone 8

50:00

12 - Proximity Sensors and Bluetooth

35:00

13 - Speech Input on Windows Phone 8

35:00

14 - Maps and Location on Windows Phone 8

35:00

15 - Wallet Support

25:00

16 - In App Purchasing

25:00

Meal Break | 60-minutes

60:00

17 - The Windows Phone Stor Store e

50:00

18 - Enterprise Applications in Windows Phone 8: Architectur Architecture e and Publishing

50:00

19 - Windows 8 and Windows Phone 8 Cross Platform Developmen Developmentt

50:00

Module Agenda



WP7.1IsolatedStorage and IsolatedStorageSettings APIs



“Local Storage” and “Isolated Storage”



Windows.Storage (Windows Phone Runtime) programming



Special Folders Shared/Media Shared/ShellContent Shared/Transfers •







Exploring the local folder with ISET Using Removable SD cards

Not Covered in this Module… •

Local Database •



No change from WP 7.1 See these Jump Start modules: http://channel9.msdn.com/Series/Mango-Jump-Start/Mango-Jump-Start-08aApplication-Data-Storage-on-Windows-Phone--Part-1 http://channel9.msdn.com/Series/Mango-Jump-Start/Mango-Jump-Start-08bApplication-Data-Storage-on-Windows-Phone-Part-2 SQLite database (native only) •





Persistent Storage in Windows Phone 8

Local Data Storage: Overview •





Installation Folder

Package Manager installs all app files into the Installation Folder Read-only access from app Read-only reference database

WP7.1: “App Data”

Install

Package Manager DB









Apps store data in Local Folder Settings and properties in the app dictionary Unstructured data in Isolated Storage files Structured data in database files

Database File (r/o)

App WP8 Storage APIs or WP7 Isolated Storage APIs Application Settings File

DB Database file

Application Files

Different Methods For Addressing Storage Locations File Type/ API

Installation Folder

Local Folder

Example

Local Database data context

appdata:/

isostore:/

MyDataContext db = new MyDataContext ("isostore:/mydb.sdf")

Files access using WP7.1 Isolated Storage API

not supported

StorageFile and StorageFolder APIs

var isf = IsolatedStorageFile.GetUserStoreForApplication()

File access using Windows.Storage API via URIs

ms-appx:///

msappdata:///local/

var file = await Windows.StorageFile.GetFileFromApplicationUriAsync ( new Uri("ms-appdata:///local/AppConfigSettings.xml" ));

File access using Windows.Storage API via StorageFolder references

Windows. ApplicationModel. Package.Current. InstalledLocation

Windows.Storage. ApplicationData. Current. LocalFolder

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; Windows.Storage.StorageFile storageFile = await  localFolder.GetFileAsync("CaptainsLog.store");

WP8 File Access Alternatives •

Three ways of getting a reference to the same file:

// WP7.1 IsolatedStorage APIs var isf = IsolatedStorageFile .GetUserStoreForApplication(); IsolatedStorageFileStream  fs = new IsolatedStorageFileStream ("CaptainsLog.store" , FileMode.Open, isf)); ...

// WP8 Storage APIs using URI StorageFile storageFile = await Windows.Storage. StorageFile .GetFileFromApplicationUriAsync( new Uri("ms-appdata:///local/CaptainsLog.store " )); ...

// WP8 Storage APIs Windows.Storage. StorageFolder  localFolder = Windows.Storage. ApplicationData .Current.LocalFolder; Windows.Storage. StorageFile  storageFile = await  localFolder.GetFileAsync( "CaptainsLog.store" ); ...

Storing Data using WP7.1 Isolated Storage APIs

Isolated Storage Classes •

The IsolatedStorage classes are all in the System.IO.IsolatedStorage namespace •

IsolatedStorageFile •



IsolatedFileStream •



Represents an isolated storage area containing files and directories

Exposes a file stream access to a file stored within isolated storage

IsolatedStorageSettings •

Dictionary) that stores key-value pairs

in isolated storage

Saving Data private void saveGameToIsolatedStorage(string message) { using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream rawStream = isf.CreateFile("MyFile.store")) { StreamWriter writer = new StreamWriter(rawStream); writer.WriteLine(message); // save the message writer.Close(); } } }

Loading Data private string loadString() { string result = null; using (IsolatedStorageFile isf = IsolatedStorageFile .GetUserStoreForApplication()) { if (isf.FileExists("Myfile.store") { using (IsolatedStorageFileStream rawStream = isf.OpenFile(filename, System.IO.FileMode.Open)) { StreamReader reader = new StreamReader (rawStream); result = reader.ReadLine(); reader.Close(); } } } return result; }

Demo 1: Using Isolated Storage

Application Settings •

If you just want to store setting information •

Username = “Fred”



TextColor = “Green”



You can use the ApplicationSettings object in Isolated Storage



You use this as you would a dictionary



You then write the object to persistent storage

Saving Data in Settings void saveString(string message, string name) { IsolatedStorageSettings.ApplicationSettings[name] = message; IsolatedStorageSettings.ApplicationSettings.Save(); }



The storage works as a dictionary



But you have to remember to call Save when you have finished adding keys

Loading from Settings string loadString(string name) { if (IsolatedStorageSettings.ApplicationSettings.Contains(name)) { return (string)IsolatedStorageSettings.ApplicationSettings[name]; } else { return null; } } •

Test for the key before you try to find it or you will get an exception thrown

Demo 2: Using Settings Storage

Using Windows Phone Runtime Storage

Windows.Storage Classes Windows Phone Runtime storage classes are in the Windows.Storage namespace





StorageFolder Represents a storage area containing files and directories StorageFile Represents a file and provides methods for manipulating them •





Not supported on Windows Phone 8:





ApplicationData.LocalSettings Use custom file or IsolatedStorageSettings •

Saving Data – Using StorageFolder using System.IO; using Windows.Storage; …

private async void saveToLocalFolderAsync(string message) { // Get a reference to the Local Folder StorageFolder localFolder = ApplicationData.Current.LocalFolder; // Create the file in the local folder, or if it already exists, just open it StorageFile storageFile = await localFolder.CreateFileAsync("Myfile.store", CreationCollisionOption.OpenIfExists); Stream writeStream = await storageFile.OpenStreamForWriteAsync(); using (StreamWriter writer = new StreamWriter(writeStream)) { await writer.WriteAsync(logData); } }

Loading Data using System.IO; using Windows.Storage; …

private async string loadStringAsync() { string theData = string.Empty; // Get a reference to the file in the Local Folder StorageFolder localFolder = ApplicationData.Current.LocalFolder; StorageFile storageFile = await localFolder.GetFileAsync(“Myfile.store")); // Open it and read the contents Stream readStream = await storageFile.OpenStreamForReadAsync(); using (StreamReader reader = new StreamReader(readStream)) { theData = await reader.ReadToEndAsync(); } return theData; }

Accessing Files Using ms-appdata:///local/ or ms-appx:/// // There's no FileExists method in WinRT, so have to try to open it and catch exception instead StorageFile storageFile = null; bool fileExists = false; try { // Try to open file using URI storageFile = await StorageFile.GetFileFromApplicationUriAsync( new Uri("ms-appdata:///local/Myfile.store")); fileExists = true; } catch (FileNotFoundException) { fileExists = false; } if (!fileExists) { await ApplicationData.Current.LocalFolder.CreateFileAsync("Myfile.store", CreationCollisionOption.FailIfExists); }

Windows Phone 8 – Windows 8 Compatibility Only LocalFolder Supported



Windows Phone 8 implementation of Windows.Storage is a subset of Windows 8 WinRT All data storage uses the LocalFolder (equivalent to WP7.1 IsolatedStorage) •



Not Supported: •







Roaming Data Store: ApplicationData.Current.RoamingFolder Temporary Data Store: ApplicationData.Current.TemporaryFolder Local Settings: ApplicationData.Current.LocalSettings Roaming Settings: ApplicationData.Current.RoamingSettings

Windows Phone 8 – Windows 8 Compatibility Programmatically Accessing Image Files



In Windows 8, you can programmatically load an Image file that you have included in your app package into a XAML element using the URI syntax, as follows: RecipeImage.Source = new System.Windows.Media.Imaging.BitmapImage( new Uri(@"ms-appx:///Images/french/French_1_600_C.jpg" , UriKind.RelativeOrAbsolute));



In Windows Phone 8, you cannot use the URI syntax in this way. Continue to use the relative path to the image, as in Windows Phone OS 7.1: RecipeImage.Source = new System.Windows.Media.Imaging.BitmapImage("/Images/french/French_1_600_C.jpg");

Demo 3: Using Windows.Storage

Special Folders

Local Folder •

All read-write I/O operations restricted to local folder •



Create a files and folder structure hierarchy Use Isolated Settings storage to store application settings

Reserved Folders •

In addition to general data storage, the local folder is used for the following special-use scenarios: •

Shared/Media - Apps can use this folder to display album art in the Universal Volume Control (UVC) while playing background audio





Shared/ShellContent - Background images for Tiles can be stored in isolated storage, but must be located in this folder or a subfolder of it Shared/Transfers – Storage area used by the Background File Transfer service

Data Serialization and Deserialization

Data Serialization •



Data persistence and the app lifecycle App Launch Deserialize data from Isolated Storage •



Not running

App being dormant/tombstoned Serialize persistent data to Isolated Storage •



App being reactivated Deserialize data from Isolated Storage •



Deactivated  /Closing

Launching

App being terminated Serialize persistent data to Isolated Storage •

Running

Why Serialize? •





Serializers write the properties of a collection of objects into a file so they can be stored in persistent storage Deserializers reverse this: read data out of a file and use it to ‘re-hydrate’ a collection of in-memory objects Many different serializers are available: XmlSerializer DataContractSerializer DataContractJsonSerializer Third party… •

• • •

Serialization using DataContractSerializer public class MyDataSerializer { public static async Task SaveObjectsAsync(TheDataType sourceData, String targetFileName ) { StorageFile file = await ApplicationData .Current.LocalFolder.CreateFileAsync( targetFileName, CreationCollisionOption .ReplaceExisting); var outStream = await file.OpenStreamForWriteAsync(); DataContractSerializer  serializer = new DataContractSerializer (typeof(TheDataType)); serializer.WriteObject(outStream, sourceData); await outStream.FlushAsync(); outStream.Close(); } ... }



To use: List myObjects = ... await MyDataSerializer.SaveObjectsAsync(myObjects, "MySerializedObjects.xml");

Deserialization using DataContractSerializer public class MyDataSerializer { public static async Task RestoreObjectsAsync( string fileName) { StorageFile file = await ApplicationData .Current.LocalFolder.GetFileAsync(fileName ); var inStream = await file.OpenStreamForReadAsync(); // Deserialize the objects. DataContractSerializer  serializer = new DataContractSerializer (typeof(TheDataType)); TheDataType data = (TheDataType)serializer.ReadObject(inStream ); inStream.Close (); return data; } ... } •

To use: List myObjects = await MyDataSerializer.RestoreObjectsAsync("MySerializedObjects.xml");

Demo 4: Serialization to Local Folder

Tools: Isolated Storage Explorer

Isolated Storage Explorer •

Isolated Storage Explorer is a command-line tool you use to list, copy, and replace files and directories in Isolated Storage • • •



Can be used on emulator or device Can be used for applications that target Windows Phone OS 7.0, 7.1 and 8.0 Located at Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\IsolatedStorageExplorerTool

Syntax: ISETool.exe [] •







ts – Take snapshot rs – Restore snapshot dir – Lists the files or directories







xd – target the emulator de – target device from the WPAppManifest.xml file for the app



Desktop-path – directory on your computer where isolated storage files are written t o or copied from

Isolated Storage Explorer Example

Accessing SD Cards

External Storage (SD Card) •

Windows Phone 8 devices support SD cards



App can discover what files are stored on a storage card •





Must declare the ID_CAP_REMOVABLE_STORAGE capability in the application manifest file Cannot write files - Access is Read Only Can only open file types for which your app has registered a file association in WMAppManifest.xml

Declare a File Association to WMAppManifest.xml •

You can only open files for which you have declared a File Association in WMAppManifest.xml



Edit WMAppManifest.xml using the XML editor, not the Manifest editor



Add a FileTypeAssociation element inside the Extensions element The Extensions element must follow immediately after the Tokens element Note that the ContentType attribute on the FileType element is required •



View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF