Sviluppare applicazioni per dispositivi mobili con Visual Studio 2005 e .NET Compact Framework 2.0 Fabio Santini [email protected] Categorie dei dispositivi Windows Mobile – PDA e dispositivi convertibili – Dispositivi per la messaggistica – Touch Screen – Tastiere QWERTY – Applicazioni verticali – Piattaforma estendibile – Innanzitutto un telefono – Input tramite Keypad e joystick – Ottimizzati per una navigazione tra le funzionalità ad una mano – Piattaforma estendibile – Dedicato a contenuti multimediali – Interfaccia grafica ottimizzata – Non touch, navigazione tramite telecomando – Capacità di video in e out Momento • Più di 10 millioni di dispositivi con il .NET Compact Framework in ROM • Più di 200,000 sviluppatori su .NET Compact Framework • Più di 600,000 download della Service Pack 1 SP3 Total Installed Base SP2 Total Installed Base 600,000 500,000 400,000 300,000 200,000 100,000 0 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr Libri In Full In Part Piccolo ma compatibile • Una copertura del 28% in un 8% di dimensione • Non supportate – – – – – – – Server functionality ASP.NET Remoting Code Access Security Reflection Emit (scripting) Individual properties, methods, events – classes factored at member level Managed C++, J# Ground-up rewrite Snapshot & Modify Execution Engine System.Threading JIT, GC, Loader, assembly cache System.IO Microsoft.Win32. Registry 86% del .NET Framework System.Text.Regex System.Collections System.Xml System.Generic. Collections System.Cryptography Microsoft.DirectX. Direct3DMobile System.Data System.Resources System.IO.Ports System.Messaging System.Net Windows.Forms System.Drawing System.Web.Services System.String Microsoft.VisualBasic 91% dell .NET Framework System.Globalization System.Text Copy Compatibilità • Le applicazioni sviluppate con versioni precedenti del.NET Compact Framework funzioneranno con la nuova versione – Il goal è il 100% di compatibilità • La nuova versione del .NET Compact Framework potrà girare su versioni precedenti di Windows CE e Windows Mobile Dispositivi supportati V1 V2 PocketPC 2000 PocletPC 2002 PocketPC 2003, SE SmartPhone 2003 WinCE 4.1 WinCE 4.2 WinCE 5.0 Pocket PC 2003 SE Pocket PC 2005 Smart Phone 2005 WinCE 5.0 Controllli Windows.Forms • • • • • • • • • • DateTimePicker MonthCalendar DocumentList LinkLabel Notification Bubble Help RichInk WebBrowser DataContainer UserControl Funzionalità Windows.Forms • Supporto per la Clipboard • Nuove proprietà, metodi e eventi – Control.DoubleClick – ToolBarButton tooltips – Più eventi Treeview – ComboBox editabile – Textbox.HideSelection – UserControl – FontCollection • Più supporto per la tastiera – Form.KeyPreview – TabIndex, TabStop Tastiera integrata HP 4300 Funzionalità per Smartphone .NET Compact Framework 2.0 • Gestione dei dati – SQL Server 2005 Mobile Edition (Windows Mobile 5.0) – DataGrid • Textbox IME switching – InputModeEditor • Abilitazione di più menu item nel menù di sinistra Networking e Web service • Web service – Aumento di prestazioni dovute alla classe XmlSerializer – Supporto per SOAP 1.2 • Autenticazione – Kerberos e NTLM – Automaticamente viene selezionato il metodo più sicuro WebService service = new WebService(); service.Credentials = new NetworkCredential(username, password, domain); • IPv6 Managed D3D Mobile • Incluso in WinCE 5.0 e le future versioni di Windows Mobile – Le API Native derivano da DX8 – Le API Managed derivano da DX9 • Funzionalità – Accesso completo alle D3DM API – Supporto ai Fixed point (Vertex Data, Matrices, Lights, e Materials) – Sprite – Font – Mesh – TextureLoader – Tutorials and Samples Emulatori • Novità di VS 2005 Beta 2 • Emulatori ARM (come i device reali) • DMA Trasport Patch (più veloce) – Installare – Da VS 2005 Configurare DMA Transport • ActiveSync 4.0 • Device Manager nuovo ! – Fare Cradle -> Emulatore == Device !!! – Es. File Explorer - Sincronizzazione • Deploy su Device anzichè emulatore DataSet • Serializzazione su singola DataTable • DataSet.Copy() – Utile per inviare copie per aggiornamento continuando a lavorare con i dati • DataSet.GetChanges – Finalmente • DataSet.Merge – Per ottenere modifiche incrementali da un WS e unirle al DS corrente DataTable Serialization • WriteXml, ReadXml • Una DataTable può essere inviata/ricevuta come argomento di un web service private void DeptComplete(string deptName, DataSet ds) { DataTable dt = ds.Tables["DeptDetail"]; dt.WriteXml(deptName + ".xml"); dt.Clear(); } private void DeptRestore(string deptName, DataSet ds) { DataTable dt = ds.Tables["DeptDetail"]; dt.Clear(); dt.ReadXml(deptName + ".xml"); } XML Serializer • Le classi possono essere serializzate e deserializzate – XmlSerializer disponibile nel framework – Serialize: salva le istanze in XML – Deserialize: legge l’XML per ricostruire l’istanza • Controllo sulla Serialization – Costruttore di default – Attribute per controllare il comportamento • XmlElement • XmlAttribute XPath • Supportato da XmlDocument • Metodi – SelectNode • Restituisce un singolo XmlNode in base al match – SelectNodes • Lista di matching node Linguaggio .NET Compact Framework 2.0 • Nuove funzionalità del linguaggio – – – – Generics Metodi anonimi Iterators Partial Types Generics • I generics sono classi e metodi che lavorano in maniera uniforme su tipi differenti • Benefici – Le variabili sono di un tipo ben preciso e non Object – Non è necessario un cast (errori in fase di compilazione) – Riutilizzo reale del codice class Stack<T> { private T[] store; private int size; public Stack() { store = new T[10]; size = 0; } public void Push(T x) { // push code goes here } public T Pop() { return store[--size]; } } void Add(Stack<int> s) { int x = s.Pop(); int y = s.Pop(); s.Push(x+y); } Metodi anonimi Blocchi di codice incapsulati in delegate Senza metodi anonimi button.Click += new EventHandler(ProcessClick); // separate method void ProcessClick(object sender, EventArgs e) { // increment a counter or other action } Con metodi anonimi button.Click += new EventHandler(sender, args) { // increment a counter or other action }; Partial Type • Divide la definizione di un tipo in file separati • Il compilatore C# combina i file per creare un unica classe • La separazione aiuta a mantenere aggiornato il codice sopratutto in presenza di generaziona automatica Cliente1.cs Cliente2.cs public partial class Cliente { public void GetOrders() { public partial class Cliente { public void GetInvoice() { } } } } Visual Studio 2005 .NET Compact Framework 2.0 Nuove API Managed in Windows Mobile 5.0 Pocket Outlook Microsoft.WindowsMobile.PocketOutlook • Wrapper sul Pocket Outlook Object Model (POOM) – Espone molte funzionalità di Pocket Office • Facilita l’uso delle informazioni dentro al PIM – Appuntamenti, contatti e task – Account di Email e SMS e messaggi – Recipienti e allegati • La classe OutlookSession è la porta d’ingresso – Wrapper dell’application objecy di Pocket Outlook Le classi di Pocket Outlook Pocket Outlook PocketOutlook.MessageInterception • Fornisce un meccanismo di processo dei messsaggi – – – – Intercetta I messaggi SMS in ingresso Può eseguire specifiche applicazioni E’ possibile impostare dei criteri di selezione Può togliere il messaggio dalla “coda” • Utile in tante situazioni – Evidenziare alcuni messaggi – Meccanismi di Push dal server – Tasporto di semplici informazioni • configurazione Le classi Message Interception Forms Microsoft.WindowsMobile.Forms • Fornisce una serie di nuove finestre di dialogo – Foto dalla camera digitale, scelta di un contatto, selezione di un immagine Forms Nuove dialog Forms Esempio // using Microsoft.WindowsMobile.Forms; // using Microsoft.WindowsMobile.PocketOutlook; CameraCaptureDialog cameraCaptureDialog = new CameraCaptureDialog(); cameraCaptureDialog.ShowDialog(); this.image = cameraCaptureDialog.FileName; this.imageDisplay.Image = new Bitmap( this.image ); ChooseContactDialog chooseContactDialog = new ChooseContactDialog(); chooseContactDialog.ShowDialog(); this.contact = chooseContactDialog.SelectedContact; this.contactName.Text = this.contact.FileAs; SelectPictureDialog selectPictureDialog = new SelectPictureDialog(); selectPictureDialog.ShowDialog(); this.picture = selectPictureDialog.FileName; this.pictureDisplay.Image = new Bitmap( this.picture ); Nuove API Managed in Windows Mobile 5.0 © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.