.NET CF
Taller de Programación de Dispositivos Móviles
José Miguel Rubio L.
Oficina 3-20
http://www.inf.ucv.cl/~jrubio
.NET CF
Windows Mobile y .NET CF
Windows Mobile = Windows CE + programas + extensiones
Modular como Windows CE, código a disposición de los ensambladores/operadoras
Dirigido a:Pocket PC, PPC Phone EditionSmartphone (SP)Portable Media Center (PMC)
.NET CF
Capacidad
Plataforma
.NET CF 2.0
MFC 8.0, ATL 8.0Broad managed code support Notifications Broker, Location, Camera, Watson, D3DM
.NET CF SP2
VGA (PPC)QVGA (SP)SquareLandscape
ATL 4.2, .NET CF
Enhanced Emulator Configuration Mgr,Bluetooth, SMS
MFC, ATL
Active SyncConnection MgrMAPIOBEXTelephony
MFC
Win32,POOM
MejorDesarrollo
Visual Studio 2005(C#, VB.NET, C++)
eVC 3 (C++)eVC 4 (C++)
VS.NET 2003 (C#, VB.NET)
eVC 3 (C++)eVC 4 (C++)
VS.NET 2003(C#, VB.NET)
eVC 3 (C++)eVB 3 (VB)
eVC 3 (C++)eVB 3 (VB)
SO WinCE 5.0WinCE 4.2WinCE 4.2WinCE 3.0WinCE 3.0
Dispositivos
FuturaPlataformaWindows Mobile2003
Second Edition200320022000
Windows Mobile y .NET CF
.NET CF
DisplayDisplayUSB or SerialUSB or Serial
ProcessorProcessorMemoryMemory
GSM/GPRSGSM/GPRSCDMA/1xRTTCDMA/1xRTT
Device Device HardwareHardware
WiFiWiFiBluetoothBluetooth
RadioRadio
DriversDrivers
Windows MobileWindows Mobile CE DBCE DBActiveSyncActiveSyncSQL MobileSQL Mobile
Pocket OutlookPocket OutlookPocket Internet ExplorerPocket Internet ExplorerWindows Media PlayerWindows Media Player
WindowsWindows CECE
NativeNative
Win32Win32
MFCMFC ATLATL
ManagedManaged
.NET Compact.NET CompactFramework 2.0Framework 2.0
Server sideServer side
ASP .NETASP .NETMobile ControlsMobile Controls
** = Managed wrappers= Managed wrappers
Visual Studio 2005Visual Studio 2005
Home ScreenHome ScreenUser Interface/ShellUser Interface/ShellHTML ControlHTML ControlDOMDOM
GAPIGAPICameraCameraD3DMD3DM
Remote APIRemote APIConfiguration*Configuration*BluetoothBluetoothNot. BrokerNot. BrokerPocket WatsonPocket Watson
Connection ManagerConnection ManagerTAPI*TAPI*SMS* SMS* MAPI* MAPI* POOM*POOM*
MultimediaMultimediaCommunicationCommunicationDevice ManagementDevice Management PresentationPresentation
SQL MobileSQL MobileADO CEADO CEXMLXMLCE DBCE DBOLE DBOLE DB
Data AccessData Access
Software Platform (APIs)Software Platform (APIs)
Windows Mobile y .NET CF
.NET CF
Contenidos
Introducción a .NET Introducción a Compact FrameworkSintaxis de C#Operaciones básicas con C#Propiedades y DataBindingAcceso a Bases de DatosInvocación de Web Services
.NET CF
Introducción (I)
¿Qué es .NET?Un conjunto de tecnologías que Microsoft ha creado y posibilitan crear programas y comunicarlos entre sí con independencia del lenguaje de programación y la plataforma de ejecución.¿Para qué tipo de máquina? � CUALQUIERA que soporte .NET
Se crea un programa y éste puede ejecutarse en cualquier máquina con .NET instalado.Puede comunicarse con otros programas independientemente de la plataforma y lenguaje
.NET CF
Introducción (II)
Además, el programa puede haber sido hecho en cualquiera de los lenguajes del conjunto .NET, que es muy amplio
C++J++C#Visual Basic.NETPascal, COBOL, Delphi, Python, .......
El conjunto cada día crece más“Escribe en el lenguaje que quieras y ejecútalo en la máquina que quieras”
.NET CF
Introducción (III)
Para conseguir esto se han creado una serie de elementos básicos
Common Language Runtime (CLR)Base Class Library (BCL)
Y unos elementos que se ejecutan sobre ellos (Windows Forms, Web Services, ...)
.NET CF
Arquitectura (I)
Common Language Runtime
.NET Framework Base Classes
ASP.NET Servicios Web
Windows Forms
.NET CF
Arquitectura (II)
Common Language RuntimeElemento que se encarga de la ejecución. El corazón de la ejecución de una aplicación en .NETSe encarga de ejecutar las aplicaciones, crear el entorno de ejecución en la máquina, etc...El concepto es similar al que usa JAVA: El código fuente es convertido a código intermedio ‘standard’(MSIL) El CLR traduce este código intermedio al código máquina de la arquitectura concreta, directamente, para que el procesador ejecute las instrucciones.
.NET CF
Arquitectura (III)
Common Language Runtime (CLR)Ventaja en .NET � CUALQUIER lenguaje .NET se traduce al código intermedio.Da igual en qué lenguaje se cree la aplicación, al final se tendrá el mismo código intermedio a ejecutar. El CLR ejecutará lo mismo provenga del lenguaje de programación que provengaPosibilidad � INTEGRACIÓN MULTILENGUAJE: Llamar a métodos o heredar de clases escritas en otros lenguajes. Todo converge al final a MSIL
.NET CF
Arquitectura (IV)
Base Class Library (BCL)Conjunto de librerías que usan los lenguajes de programación .NETEs un conjunto de clases que ofrece la funcionalidad básica: Desde vectores y arrays a sockets y librerías de Base de DatosPor supuesto, cualquier usuario puede aumentar la librería creando nuevas clases que pueden o no heredar de éstas
Código Fuente Código Intermedio Código MáquinaCompilar CLR
Ejecuc
ión
.NET CF
Arquitectura (V)
Elementos que residen encima de CLR y BCL
Windows Forms: Aplicaiones de formulariosASP.NET: Generación que evoluciona de los ASP’s comunes. Creación de páginas web dinámicasWeb Services: invocación remota a servicios de todo tipo a través de la web
.NET CF
Usar .NET en dispositivos móviles
Aprovechando esta propiedad de .NET, se pueden crear aplicaciones para móviles fácilmente¿Y si existiera un CLR especial para dispositivos móviles?
Podríamos programar normalmente, compilar, crear el lenguaje intermedio (MSIL) y el CLR se encargaría de ejecutarlo en el procesador de estos dispositivos
Para eso se ha creado .NET Compact Framework
.NET CF
.NET Compact Framework (I)
La idea es poder programar estos dispositivos sin necesidad de ser especialista en ellosSe programarían tal y como programamos aplicaciones de un PC de sobremesa, el CLR se encargaría del restoProblema� Un procesador de un dispositivo de este tipo es mucho menos potente que el de un PC de sobremesa
Es necesario un CLR reducido, menos potente que el CLR ordinario
.NET CF
.NET Compact Framework (II)
¿Consecuencia de esto?Al tener menos potencia las clases que requieran mayor proceso o que por alguna otra razón no se puedan implementar en estos dispositivos se eliminanQueda un subconjunto de las clases de sobremesaSin embargo, se ha conseguido que el conjunto funcional de clases en Compact Framework aún siga siendo muy amplioEl objetivo es que el programador acostumbrado al CLR normal no se vea ‘con las manos cortadas’Además, las características básicas propias de .NET siguen intactas
.NET CF
¿Cómo programar en .NET CF?
Para empezar a usar CF usaremos el lenguaje de programación C#Como herramienta de desarrollo usaremos Visual Studio .NET 2003
Visual Studio tiene varias plantillas de proyectos, dependiendo del tipo. Usaremos la específica de dispositivos móviles.Visual Studio Ofrece funciones útiles como emulador de PocketPC, el despliegue automático de la aplicación a un dispositivo real, etc
.NET CF
¿Cómo programar en CF?
Con Visual Studio se puede ejecutar la aplicación en un dispositivo móvil real, mientras se hace debug en el mismo PCHay otras herramientas alternativas de desarrollo
Desarrollo en C# : SharpDevelop (Open Source) http://www.icsharpcode.net/opensource/sd/Etc...
.NET CF
El lenguaje C# (I)
C# es muy parecido a JavaPequeñas diferencias de sintaxis, algunos elementos nuevos y diferentes libreríasPor ser parte de .Net
Lenguaje autocontenido � no necesita ficheros extra demás del fuente (ficheros de cabecera, etc..) guarda toda la información necesaria él mismoRecolector de basura � no necesita que el programador se encargue de gestionar la memoria
.NET CF
El lenguaje C# (II)¡En C# CUALQUIER cosa hereda de object!
Hasta los tipos básicos como int se pueden tratar como objetos, a diferencia de Java
Se pueden redefinir operadores, como en C++ y a diferencia de JavaNo es necesario usar punteros, pero para el que quiera hacerlo (o necesite migrar una aplicación hecha por ejemplo en C++) existe la opción �Código Inseguro (unsafe)Las clases de la librería base se encuentran divididas en grupos. En Java se llaman paquetes, en C# se llaman NameSpaces (espacios de nombres)
.NET CF
Namespaces
namespaceJugueteria{
classJuguete{
...}
}
Crear un Namespace:
Usar un Namespace (en Java se hace con ‘import’)
usingJugueteria;
.NET CF
Principales Namespaces
System � Los tipos más frecuentemente usados (tipos básicos y tablas, fechas...)System.Collections � Colecciones de datos más comunes (pilas, colas, listas ...)System.Data � Manipulación de Bases de DatosSystem.IO � Manipulación de ficherosSystem.Net � Comunicaciones en redSystem.Threading � Manipulación de ThreadsSystem.Windows.Forms � FormulariosSystem.Web.UI.WebControls � Controles Web
.NET CF
Más sintaxis (I)
En C# la clase string (con minúscula) se puede comparar con el operador == y hasta los tipos básicos como int tienen método ToString()El acceso a consola es con System.Console.WriteLine(“Hola Mundo!”); System.Console.ReadLine();Herenciapublic class Trabajador: PersonaConstantespublic const int NO_VALIDO = -1;
.NET CF
Más sintaxis (II)
Instrucción nueva � foreach recorre automáticamente una colección de datos (array, lista, etc...). Como un for que pasa por todos los elementos de la colección.Suponiendo que la variable trabajadores es una lista de instancias de la clase Trabajador:foreach (Trabajador tt in trabajadores)
{
Console.WriteLine( tt.ToString() );
}
La instrucción recorre la colección trabajadores, extrae cada uno de los elementos de ella, que son de tipo Trabajador, los coloca en la variable t y aplica las instrucciones del bucle
.NET CF
Un ‘Hola Mundo’ para PocketPC
Visual Studio 2003 � Nuevo Proyecto �C# y Smart Device ApplicationPrimer control de formulario � TextBoxEvento Form_Loadprivate void FormHola_Load( object sender, System.EventArgs e)
{
this .textHola.Text = "¡¡Hola Mundo!!";
}
.NET CF
Controles clásicos de formulario (I)
Form, Label, TextBoxAtributo Text
CheckBox, RadioButtonAtributos Text y Checked
ListBox, ComboBoxAtributos Items (indizado) y SelectedIndexAtributos SelectedItem y SelectedValue
CommandEvento OnClick
.NET CF
Controles clásicos de formulario (II)
PanelAtributo Controls
TimerAtributo Interval, evento Tick
MainMenuMenú principal del formulario
InputPanelTeclado en pantallaEn dispositivos móviles suele ser la única posibilidad de entrada de textoPara que aparezca es necesario un MainMenu
.NET CF
Listas en C#Para almacenar listas de elementos la clase más usada es ArrayListSimilar al Vector en JavaNamespace � System.CollectionsCrear
ArrayList a = new ArrayList();
Añadira.Add( object );
Acceder a un elemento (usar casting)string elemento = ( string )a[0];
Eliminara.RemoveAt( int índice ); a.Remove( object );
.NET CF
Propiedades (I)La forma propia del lenguaje para acceder a los atributos. En Java son los métodos get/setAñadir una propiedad a un atributoclass juguete {
private string nombre;
public string Nombre
{
get { return nombre;}
set {nombre = value ;}
} }
La palabra ‘value’ representa el valor que se le quiere dar a la propiedad
.NET CF
Propiedades (II)
A diferencia de Java, a la hora de acceder a las propiedades, en C# no es necesario escribir los métodos get/setJuguete j = new Juguete();
j.Nombre = “Tambor”; //set, value = “Tambor”
string nombreJuguete = j.Nombre //get
De esta manera se consigue controlar el acceso a los atributos y sus valores (controlar valores no válidos, propiedades de sólo lectura sin set..)
.NET CF
Controles ligados a datos: DataBound (I)
En lugar de recorrer una colección de datos y manualmente rellenar items de un control de formulario, podemos hacer esto de forma automáticaLos controles tienen un campo DataSource que les sirve para ligarse a los datosEste campo puede ser cualquier tipo de colección: arrays, ArrayLists...O incluso una colección de datos que proviene directamente de una base de Datos
Nos ahorramos leer los registros de una consulta SQL uno por uno y rellenar
.NET CF
Controles ligados a datos: DataBound (II)
DataBound simplestring[] nombres = new string[] {“Tambor”, “Bratz”, “Action Man”};
ListBox lista = new ListBox();
...
lista.DataSource = nombres;
Lista resultado en el formulario
.NET CF
DataBound (III)
La colección no tiene por qué ser de tipos básicos, puede ser de clases complejasSi el control es en forma de tabla, cada propiedad de la clase será una columna.Si el control sólo puede manejar una propiedad (ListBox) hemos de indicarle qué propiedad utilizar
Atributo DisplayMember � string, le damos el nombre de la propiedad a visualizarAtributo ValueMember � igual que DisplayMember, pero se aplica al atributo ‘value’, si existe, asociado a cada item
.NET CF
Acceso a Bases de Datos
Con Compact Framework se puede acceder a una Base de Datos remota o bien tener una pequeña BD en el dispositivoSe sigue el modelo ADO.NET, evolución de ADOCrear una BD usando el driver ‘SQL Server CE’implica las siguientes clases
SqlCeEngine � Crear la BDSqlCeConnection � Conexión a la BDSqlCeCommand � Comandos SQL de creación de tablas, etc..
Namespace System.Data.SqlServerCe
.NET CF
SqlCeEngineCrea la Base de Datos dentro del dispositivo, en forma de un archivo con extensión *.sdf en la ruta que se le especifiqueCrear un engine: Especificar el archivo de la BD
SqlCeEngine engine = new SqlCeEngine( “Data Source = \\ruta\\Jugueteria.sdf”);
Crear la BD: crea el archivo y monta la BDengine.CreateDatabase();
Si el archivo existe ya, puede haber problemasNameSpace � System.IOFile.Exists (“NombreArchivo”);
File.Delete (“NombreArchivo”);
.NET CF
SqlCeConnection
Se conecta a una BD existente y mantiene una sesión con ella, para enviar comandos, consultas, etcCrear una conexión
SqlCeConnection con = newSqlCeConnection( “Data Source = Jugueteria.sdf” );
Abrir la conexióncon.Open();
Cerrar la conexióncon.Close();
.NET CF
SqlCeCommand
Manda comandos y consultas a una BD con una conexión abiertaCrear un SqlCeCommand: a partir de una conexión abierta
SqlCeCommand comm = con.CreateCommand();
Mandar un comandoPropiedad CommandText � Sentencia SQLMétodo ExecuteNonQuery() � ejecución del comando contra la Base de Datos
.NET CF
ExcepcionesLas excepciones se tratan igual que en Java (try / catch / finally)La diferencia es que en el catch sólo es obligatorio poner el tipo de excepción, no es necesario declarar la variable, y no es necesario capturar toda excepción con try / catch. Se propagan automáticamente
catch ( SqlCeException ){}
catch ( SqlCeException SqlEx ){}
Los mensajes de error lo normal es que se muestren en ventanas de mensajes:
MessageBox.Show (“Texto”, “Título”);
.NET CF
Consultas a una BD
Siguiendo el modelo ADO.NET, para realizar una consulta se ven implicadas las siguientes clases
SqlCeConnectionSqlCeCommand � Método ExecuteReader()SqlCeDataReader
.NET CF
SqlCeDataReader
El método ExecuteReader() devolverá un objeto de esta clase como resultado, el método de lectura es similar a JavaRead() � Avanza al siguiente registro. Devuelve false si no hay más registros, true en caso contrario. Es necesario invocar Read() antes de la primera lecturaGetString( int columna ) � Lee el valor (string) de la columna que se le indique. Hay variantes
GetInt32( int )GetSqlMoney( int )...
.NET CF
DataSetOtro tipo de lectura de BDEstructura de datos compleja que recoge toda la consulta hecha contra la BDPuede colocarse como ‘DataSource’ para ligar el control a los datos de la BD (DataBound)Para rellenar un DataSet usaremos una clase llamada SqlCeDataAdapterSqlCeDataAdapter dataAdapter = new
SqlCeDataAdapter(“Consulta SQL", conexión_BD);
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
El DataSource más común es dataSet.Tables[0]
.NET CF
Web Services (I)Un Web Service es un servicio residente en local o en otra máquina y que puede ser invocado en forma de método de forma remota � Una forma más de invocación remotaPara hacer la invocación, pasar los parámetros y recoger el resultado se utiliza una comunicación basada en XML (standard)La invocación se hace por Web (puerto 80) � No es cortada por FireWallsMontones de Web Services Gratuitos
http://www.xmethods.nethttp://www.capescience.com/webserviceshttp://www.webservicex.net/WS/wscatlist.aspx
.NET CF
Web Services (II).NET CF puede invocar Web ServicesDesde Visual Studio 2003 se pueden localizar Web Services muy fácilmente
Proyecto�Solution Explorer�References�AñadirReferencia WebIntroducir la url donde se encuentra el servicio y añadir referenciaIncluir el NameSpace nuevo que se ha creado (using)
El NameSpace del proyecto es Ejercicio y el Web Service estáen www.deusto.es � using Ejercicio.es.deusto.www;
Aparecen clases en ese NameSpace para invocar el servicioSe usan normalmente, pero son objetos remotos
.NET CF
Referencias en la Web
.NET CF Development Center -http://msdn.microsoft.com/smartclient/understanding/netcf/OpenNetCf - http://www.opennetcf.orgMSMobiles - http://msmobiles.com/