taller de programación de dispositivos móvileszeus.inf.ucv.cl/~jrubio/docs/2008-02/ici 592/net...

Post on 01-Nov-2018

227 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

.NET CF

Taller de Programación de Dispositivos Móviles

José Miguel Rubio L.

Oficina 3-20

http://www.inf.ucv.cl/~jrubio

jose.rubio.l@ucv.cl

.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/

top related