Você está na página 1de 73

Programacin Avanzada

FORO 1

NRC:1727

Fernando Acurio
Jonathan Benavides
Cristhian Cuichn
Diego Yandn
2

I. Objetivo

a) Investigar acerca de los temas relacionados a J2ME y Android haciendo uso de


materiales de consulta con el fin de conocer el funcionamiento de dichos lenguajes.
b) Desarrollar un documento donde contenga los temas descritos en el foro subido al
aula virtual.
c) Disear, desarrollar e implementar aplicaciones de alta complejidad y media
complejidad de los temas aprendidos en clase.

II. Estado del arte.


Introduccin

Un sistema operativo mvil, es un sistema que controla un dispositivo mvil, de la


misma forma en que las computadoras utilizan un Windows o un Linux entre otros.
Los sistemas operativos mviles son mucho ms simples que los que usan las
computadoras y generalmente van enfocados a la conectividad inalmbrica, los
formatos multimedia para mviles y la manera en que se introduce la informacin en
ellos.
Existen diferentes opciones de sistemas operativos mviles pero las ms reconocidas
son:
Android
iPhone OS (iOS)
Windows Mobile
El uso de uno u otro de los sistemas operativos es el que determina las capacidades
multimedia de los dispositivos y la forma en como estas van a interactuar con el
usuario.
Los sistemas operativos utilizados en los dispositivos mviles estn basados en el
modelo de capas.
Estas capas son:
Kernel: Es el que proporciona el acceso a los distintos elementos del hardware del
dispositivo. Ofrece distintos servicios a las superiores como son los controladores o
drivers y el acceso y gestin de la memoria.
Middleware: Es el conjunto de mdulos que hacen posible la propia existencia de
aplicaciones para mviles. Es totalmente transparente para el usuario y ofrece
servicios claves como el motor de mensajera y comunicaciones, cdecs multimedia,
intrpretes de pginas web, gestin de dispositivos y seguridad.
Entorno de ejecucin de aplicaciones: consiste en un gestor de aplicaciones y un
conjunto de interfaces programables abiertas para facilitar la creacin de software.
Interfaz de usuario: Facilita la interaccin con el usuario y el diseo de la
presentacin visual de la aplicacin. Los servicios que incluye son el de componentes
grficos y el del marco de interaccin.

ESPE Pgina 2
3

Ilustracin 1 Ranking de los SO ms populares

Entornos de desarrollo de aplicaciones mviles


Una aplicacin web es, bsicamente, un sitio web especficamente optimizado para
un dispositivo mvil. Las caractersticas que definen una aplicacin web son las
siguientes: la interfaz de usuario se construye con tecnologas web estndar, est
disponible en una URL2 (pblica, privada o protegida por una contrasea) y est
optimizada para los dispositivos mviles. Una aplicacin web no est instalada en el
dispositivo mvil.
Las aplicaciones nativas
por el contrario, estn instaladas en el dispositivo mvil, tienen acceso al hardware
(altavoces, acelermetro, cmara, etc.) y estn escritas en algn lenguaje de
programacin compilado (como, por ejemplo, el Objetive-C).
Java ME
Sun desarroll una versin de Java especialmente diseada para dispositivos mviles,
Java 2 Micro Edition, basada en una mquina virtual llamada KVM
Symbian
Symbian es un sistema operativo fruto de la alianza de varias empresas de telefona
mvil, entre las que se encuentran Psion, Nokia, Ericsson y Motorola, con el que se
pretenda desarrollar y estandarizar un sistema operativo que permitiera a telfonos
mviles de diferentes fabricantes intercambiar informacin
Android
Android es una plataforma basada en Linux de la Open Handset Alliance, entre cuyos
treinta y cuatro miembros se encuentran Google, HTC, Motorola, Qualcomm y T-
Mobile. Por lo tanto, treinta y cuatro de las principales compaas de software,
hardware y telecomunicaciones dan soporte a esta plataforma. El kernel de Linux se
usa como HAL. La programacin de aplicaciones se hace bsicamente en Java. Es
necesario el SDK10 especfico de Android para desarrollar, aunque se puede usar
cualquier IDE11 Java
Windows Mobile
Windows Mobile es una variante de Windows CE para telfonos mviles.
Originalmente, Windows CE se desarroll para ordenadores de bolsillo y PDA con
pantallas tctiles que funcionaban con un stylus, y se adapt posteriormente para su
uso en smartphones equipados con un teclado

ESPE Pgina 3
4

Qi framework
Qt usa estndar C++, pero hace un uso extensivo de un pre procesador especial
llamado MOC14 para enriquecer el lenguaje. Tambin se puede usar Qt en otros
lenguajes de programacin utilizando enlaces entre lenguajes. Funciona sobre las
principales plataformas y tiene un soporte internacional extenso.
BREW
BREW se usa para aplicaciones en dispositivos CDMA, aunque tambin soporta
modelos GPRS/GSM. Las aplicaciones se distribuyen mediante una plataforma de
contenido BREW y han tenido poca penetracin en Europa.
Palm OS
Desde la aparicin del primer Palm Pilot (en 1996), la plataforma Palm OS ha
proporcionado a sus dispositivos mviles herramientas de negocio esenciales, as
como la capacidad de acceder a Internet o a una base de datos central corporativa
mediante una conexin inalmbrica.

Libreras
En los ltimos 5 aos, desarrollar en Android se est convirtiendo cada da en algo
mucho ms fcil gracias a las mejoras del ADT (Android Development Tools), pero
sobre todo a las libreras que nos facilitan esta tarea.
Dentro de las libreras ms utilizadas y que son gratuitas estn las siguientes:
Android Support Package
Una de las mejores libreras. El equipo de Android la ha desarrollado para hacer
compatibles las innovaciones de los ltimos SDK con versiones antiguas. Puedes por
ejemplo desarrollar con Fragments o utilizar los fantsticos Loaders de las ltimas
revisiones.
ActionBar Sherlock
Otra excelente librera que introdujo Android 3 fue la Action Bar. Por alguna razn
desconocida, esta no se incluye en el Support Package. Sin embargo, esta otra librera
nos da toda la funcionalidad de las mismas adaptada a versiones muy anteriores de
Android. Prcticamente idntica de usar a la oficial.
Roboguice
Una herramienta que facilita enormemente la programacin mediante inyecciones de
cdigo. Permite por ejemplo cargar las vistas sin necesidad de los tediosos castings
del findViewById. Es ms fcil verlo que explicarlo.
ViewPagerIndicator
Esta es una de las libreras ms discutidas debido a la experiencia de usuario.
Actualmente es prcticamente imprescindible si queremos dotar a nuestras
aplicaciones de una experiencia de usuario moderna. Permite la navegacin por
pestaas mediante el gesto de arrastre (o swipe), entre otras opciones.
GreenDAO
Excelente librera para trabajar con bases de datos de SQLite mediante objetos. Quiz
no merezca la pena para proyectos pequeos, pero puede facilitar mucho la vida con
bases de datos con varias tablas y objetos algo ms complejos.

ESPE Pgina 4
5

Ilustracin 2 Librera GreenDAO

Bugsense
Esta librera enva informacin sobre errores que se producen cuando los usuarios
estn utilizando tu App y la presenta de manera muy detallada en tu rea de clientes.
Pull To Refresh
El mtodo de actualizacin de listas o cualquier tipo de grid tirando de ellos es un
patrn intuitivo que se ha colado en nuestros dispositivos y que seguramente te
vendr bien reproducir en muchos casos. Esta librera incorpora toda la lgica
necesaria.
HoloEverywhere
Consigue dotar a tus aplicaciones la apariencia Holo independientemente de la
versin de Android de su dispositivo. Disponible desde el SDK correspondiente a
Android 1.6.
Gson
Aunque no es exclusiva de Android, sino ms bien de Java, esta librera nos permite
transformar JSON en objetos Java y viceversa, lo que resultar muy til para enviar
y recuperar objetos entre la aplicacin y un servidor.

Framework
Al igual que con la creacin de un sitio web, existen ciertos lenguajes especficos que
debes conocer para desarrollar una aplicacin mvil. El lenguaje vara segn el
sistema operativo, por ejemplo, para iOS debes entender la semntica de Swift, para
Android es necesario Java o C. Sin embargo, en la actualidad, puedes desarrollar
aplicaciones para mviles sin necesidad de conocer estos lenguajes gracias a tiles
framework mviles que poseen una serie de herramientas y permiten el desarrollo de
aplicaciones mediante el uso de HTML, CSS y JavaScript. As que, si tienes
experiencia en el desarrollo de sitios web y conoces sobre estos lenguajes, puedes
empezar a crear tus propias aplicaciones mviles.
La creacin de una app nativa solo requiere del entorno de desarrollo especfico del
SO, xCode para iOS, por ejemplo. En cambio, las apps hbridas o apps web basadas
en HTML5 disponen de una gran variedad de herramientas (frameworks y libreras).
El lenguaje de programacin predominante en todas ellas es el Javascript. A pesar de
haber muchas alternativas y de que no dejan de aparecer nuevas opciones, algunas
tienen o estn ganando popularidad dentro de la comunidad de desarrolladores.
Adems, es importante recordar que la eleccin de la herramienta a utilizar determina
el coste y la futura escalabilidad del proyecto.
Dentro de los frameworks que pueden ayudar a desarrollar aplicaciones mviles estn
las siguientes:
Sencha Touch

Sencha Touch posee ms de 50 componentes y temas para sistemas operativos como


iOS, Android, Blackberry y Windows Phone. Posee tambin widgets para interfaz
ESPE Pgina 5
6

que han sido diseados especficamente para dispositivos mviles, de modo que, sin
importar el sistema operativo, puedes tener una aplicacin que luce bien y es
completamente funcional. No slo cuenta con una gran cantidad de componentes
predeterminados, sino que te permite personalizarlos y aadirlos a tu librera para que
puedas usarlos nuevamente a futuro.
Para el desarrollo de Sencha Touch se ha usado la popular framework JavaScript
ExtJS, de esta manera ests seguro de poder crear aplicaciones de alto rendimiento.
Sencha Touch es una framework de pago que posee un periodo de prueba de 30 das.
Kendo UI

Kendo UI es otra opcin de framework que te permite crear aplicaciones hbridas con
HTML5, CSS y JavaScript. Posee ms de 70 componentes listos para su
implementacin. Asimismo, al igual que Sencha Touch, incluye una variedad de
temas para que puedas cambiar el aspecto de tu aplicacin de forma inmediata y te
permite crear temas personalizados. Se puede integrar con angular
Puede ser considerada la competencia de Sencha Touch pues empresas como Sony,
Microsoft y Volvo la han elegido como su framework de confianza. Kendo UI es una
framework de pago que posee diversos planes. Tambin puedes acceder a un periodo
de prueba gratuito.
Ionic

Ionic se describe como un ecosistema pues posee una serie de herramientas que
facilitan el proceso de desarrollo de aplicaciones hbridas. Algunas de ellas son Ionic
Lab que te permite realizar pruebas en sistemas iOS y Android o LiveReload que
te permite actualizar cualquier cambio que se haya realizado en el cdigo de tus
aplicaciones de forma instantnea.
Ionic es poderosa pues emplea Angular y Cordova. Gracias a su integracin Angular,
se obtiene una framework robusta, con una gran variedad de opciones que permite
crear aplicaciones de alto rendimiento.
Ionic es uno de los lderes en cuanto a frameworks para desarrollo de aplicaciones
hbridas se refiere. Y es de esperarse, pues se encuentra en constante actualizacin de
acuerdo con las ltimas tendencias y tecnologas, sin mencionar que se puede usar de
manera gratuita. Tambin existe un plan para empresas que contiene caractersticas
especiales.
jQuery Mobile

jQuery Mobile tiene como objetivo el desarrollo de aplicaciones que funcionen en


cualquier plataforma, sin importar el sistema operativo. Ya que solo tiene
dependencia de jQuery, es una framework ligera con la que es muy sencilla
familiarizarse.
Ha sido desarrollada por la comunidad de usuarios de jQuery que le han dado un
aspecto y propsito minimalista. Debido a su propio enfoque, se dirigen todos los
esfuerzos en la compatibilidad de la aplicacin que crees con el framework.

ESPE Pgina 6
7

Android
Android es un sistema operativo basado en el ncleo Linux. Fue diseado
principalmente para dispositivos mviles con pantalla tctil, como telfonos
inteligentes, tablets y tambin para relojes inteligentes, televisores y automviles.
Inicialmente fue desarrollado por Android Inc., empresa que Google respald
econmicamente y ms tarde, en 2005, compr. Android fue presentado en 2007
junto la fundacin del Open Handset Alliance (un consorcio de compaas de
hardware, software y telecomunicaciones) para avanzar en los estndares abiertos de
los dispositivos mviles. El primer mvil con el sistema operativo Android fue el
HTC Dream y se vendi en octubre de 2008. Los dispositivos de Android venden
ms que las ventas combinadas de Windows Phone e IOS.6
El xito del sistema operativo se ha convertido en objeto de litigios sobre patentes en
el marco de las llamadas Guerras por patentes de telfonos inteligentes (en ingls,
Smartphone patent wars) entre las empresas de tecnologa. Segn documentos
secretos filtrados en 2013 y 2014, el sistema operativo es uno de los objetivos de las
agencias de inteligencia internacionales.
La versin bsica de Android es conocida como Android Open Source Project
(AOSP).
El 25 de junio de 2014 en la Conferencia de Desarrolladores Google I/O, Google
mostr una evolucin de la marca Android, con el fin de unificar tanto el hardware
como el software y ampliar mercados.
El 17 de mayo de 2017, se present Android Go. Una versin ms ligera del sistema
operativo para ayudar a que la mitad del mundo sin smartphone consiga uno en menos
de cinco aos. Incluye versiones especiales de sus aplicaciones donde el consumo de
datos se reduce al mximo.
Arquitectura
Los componentes principales del sistema operativo de Android (cada seccin se
describe en detalle):
Aplicaciones
Las aplicaciones base incluyen un cliente de correo electrnico, programa de SMS,
calendario, mapas, navegador, contactos y otros. Todas las aplicaciones estn escritas
en lenguaje de programacin Java.
Marco de trabajo de aplicaciones
Los desarrolladores tienen acceso completo a los mismos APIs del framework usados
por las aplicaciones base. La arquitectura est diseada para simplificar la
reutilizacin de componentes; cualquier aplicacin puede publicar sus capacidades y
cualquier otra aplicacin puede luego hacer uso de esas capacidades (sujeto a reglas
de seguridad del framework). Este mismo mecanismo permite que los componentes
sean reemplazados por el usuario.
Bibliotecas
Android incluye un conjunto de bibliotecas de C/C++ usadas por varios componentes
del sistema. Estas caractersticas se exponen a los desarrolladores a travs del marco
de trabajo de aplicaciones de Android; algunas son: System C library
(implementacin biblioteca C estndar), bibliotecas de medios, bibliotecas de
grficos, 3D y SQLite, entre otras.
Runtime de Android

ESPE Pgina 7
8

Android incluye un set de bibliotecas base que proporcionan la mayor parte de las
funciones disponibles en las bibliotecas base del lenguaje Java. Cada aplicacin
Android corre su propio proceso, con su propia instancia de la mquina virtual
Dalvik. Dalvik ha sido escrito de forma que un dispositivo puede correr mltiples
mquinas virtuales de forma eficiente.
Ncleo Linux
Android depende de Linux para los servicios base del sistema como seguridad,
gestin de memoria, gestin de procesos, pila de red y modelo de controladores.
El ncleo tambin acta como una capa de abstraccin entre el hardware y el resto
de la pila de software.
XML

XML (Extensible Markup Language) es un lenguaje de etiquetas, es decir, cada


paquete de informacin est delimitado por dos etiquetas como se hace tambin en
el lenguaje HTML, pero XML separa el contenido de la presentacin.
No es un lenguaje de etiquetas, sino un conjunto de reglas para definir lenguajes de
etiquetas (como HTML). XML nos dice cmo podemos crear nuestras propias
etiquetas.

Caractersticas
XML es un estndar para escribir datos estructurados en un fichero de texto.
XML est en formato texto, pero no para ser ledo.
XML no requiere licencia

Estructura

Un documento XML tiene dos estructuras, una lgica y otra fsica. Fsicamente, el
documento est compuesto por unidades llamadas entidades. Una entidad puede
hacer referencia a otra entidad, causando que esta se incluya en el documento.
Cada documento comienza con una entidad documento, tambin llamada raz.
Lgicamente el documento est compuesto de declaraciones, elementos,
comentarios, referencias a caracteres e instrucciones de procesamiento, todos los
cuales estn indicados por una marca explcita.

ESPE Pgina 8
9

J2ME
J2ME o Java ME (Java Platform, Micro Edition) es un entorno flexible y slido para
el desarrollo de aplicaciones para dispositivos mviles e integrados. La tecnologa
Java ME se cre originalmente para paliar las limitaciones asociadas a la creacin de
aplicaciones para pequeos dispositivos. Oracle ha definido los fundamentos de la
tecnologa Java ME para adaptarse a entornos limitados y hacer posible la creacin
de aplicaciones Java que se ejecuten en pequeos dispositivos con memoria,
visualizacin y potencia limitadas. (Java.com, 2017)
Elementos
Para poder conocer el funcionamiento de esta tecnologa se debe conocer 4 elementos
bsicos necesarios para su ejecucin:
Sistema Operativo: este ser el que controle las funciones bsicas del dispositivo, por
lo general cerrado y propiedad del fabricante.
Mquina virtual (JVM): Java es un lenguaje interpretado que requiere de una
mquina virtual, sin embargo, eso depender del sistema en el que deba correr.
Configuraciones: La configuracin define el ncleo de J2ME (runtime environment)
en la JVM.
Perfiles: Son libreras de alto nivel que se agregan a la configuracin o tambin por
tipos de aplicacin; los perfiles son especficos al tipo de dispositivo. Un perfil puede
ser agregado a otro perfil. De ah que los fabricantes como Nokia provean APIs de
programacin para sus modelos ms recientes.

En la siguiente ilustracin podemos ver grficamente la relacin entre cada una de


las ediciones de Java y los tipos de dispositivos con que se podran programar:

Ilustracin 3 J2ME

ESPE Pgina 9
10

Arquitectura
J2ME presenta dos configuraciones: CLDC y CDC. La primera se dedica a
dispositivos con estrictas limitaciones de memoria, capacidad de clculo, consumo y
conectividad de red. Por otro lado, CDC se encarga de dispositivos con ms potencia.
Parte de CLDC es un subconjunto de CDC, por lo que la portabilidad de aplicaciones
se puede conseguir cuando nos movemos de un entorno ms restringido a otro ms
rico. De la misma manera, y siguiendo en el hilo de la portabilidad, una aplicacin
en J2ME podr ejecutarse en J2SE normalmente, salvo que se utilicen las bibliotecas
especficas de J2ME.
CLDC
Veamos ms detalladamente algunas caractersticas de CLDC, ya que es la
configuracin en la que nos centraremos en este curso. Comencemos por las
propiedades mnimas requeridas a un dispositivo para poder desarrollar con esta
configuracin:
De 160 a 512 Kbytes de memoria disponible para el entorno de Java.
Un procesador de 16 o 32 bits.
Consumo de energa bajo (generalmente utilizan bateras).
Permiten algn tipo de conectividad a una red (lo normal, es una conexin
intermitente, con un ancho de banda bajo -sobre 9600 bps- y a menudo
inalmbrica.
Al tener como objetivo dispositivo con prestaciones reducidas, CLDC elimina una
gran cantidad de caractersticas que s aparecen en J2SE, tanto en el propio lenguaje
Java como en la mquina virtual, como, por ejemplo:
Interfaz nativo de Java (Java Native Interface -JINI) (Mquina virtual).
Cargadores de clases definidas por el usuario (Mquina virtual).
Grupos de hilos e hilos demonios (Mquina virtual).
Finalizacin (lenguaje Java).
Referencias dbiles (Mquina virtual).
Reflexin (Mquina virtual).
Tipos de datos de punto flotante (lenguaje Java).
Algunos aspectos de seguridad y APIs (Mquina virtual).
Verificacin de ficheros de clases (Mquina virtual).
Posee algunas limitaciones en las gestiones de errores (lenguaje Java).

ESPE Pgina 10
11

III. Diseo, Desarrollo e implementacin de tres aplicaciones que


usen Objetos de usuario (2 de mediana y el otro de alta
complejidad).
Aplicaciones J2ME
Aplicacin 1

Ahora creamos dentro del paquete ecuaciones un nuevo archivo Tipo Visual MIDlet, y le damos
como nombre Operacin.

ESPE Pgina 11
12

Dentro del constructor agregamos el siguiente cdigo que nos permite activar la pantalla del
emulador.

Ahora definimos los atributos que necesitamos para el clculo de la ecuacin de segundo grado.

Creamos el botn que calcular las races de nuestra ecuacin para ello pegamos despus de los
atributos que declaramos el siguiente cdigo:
public void commandAction(Command command, Item item) {

if (item == calcular) {
if (command == itemCommand3) {
try {
double a1=Double.parseDouble( a.getString());
double b1=Double.parseDouble( b.getString());
double c1=Double.parseDouble( c.getString());
double raiz=Math.sqrt((b1*b1)-(4*a1*c1));

if (raiz >=0){

status.setText("Estado: Calculando...");
double X1=(((-1)*b1)+raiz)/2*a1;
double X2=(((-1)*b1)-raiz)/2*a1;

String x01=String.valueOf(X1);
ESPE Pgina 12
13

String x02=String.valueOf(X2);
status.setText("Estado: Calculo Terminado..");
x1.setString(x01);
x2.setString(x02);
}
else{
status.setText("Error: Raz < 0 ");
x1.setString("");
x2.setString("");
}
} catch (NumberFormatException ex) {
ex.printStackTrace();
x1.setString("");
x2.setString("");
// Do nothing
}
catch (ArithmeticException ax){
status.setText("Error: Divisin por cero");
x1.setString("");
x2.setString("");
}
}
} else if (item == a) {
if (command == itemCommand4) {
// Insert pre-action code here
// Do nothing

double prea1=(Double.parseDouble( a.getString()))*(-1);


String posta1=String.valueOf(prea1);
a.setString(posta1);

}
} else if (item == b) {
if (command == itemCommand5) {

// Do nothing
double prea1=(Double.parseDouble( b.getString()))*(-1);
String posta1=String.valueOf(prea1);
b.setString(posta1);
}
} else if (item == c) {
if (command == itemCommand6) {
// Insert pre-action code here
// Do nothing
double prea1=(Double.parseDouble( c.getString()))*(-1);
String posta1=String.valueOf(prea1);
c.setString(posta1);
}
}
Ahora Inicializamos la ventana con las variables de entrada en el emulador
private void initialize() {
ESPE Pgina 13
14

x1 = new TextField("x1=", null, 120, TextField.ANY);


getDisplay().setCurrent(get_helloForm());

getDisplay().setCurrent(get_splashScreen1());

status.setText("Estado: Introduzca los valores.");


}
Programamos el botn de salir
public void commandAction(Command command, Displayable displayable) {
// Insert global pre-action code here
if (displayable == helloForm) {
if (command == exitCommand) {
exitMIDlet();
}
}
}
Por ltimo definimos los mtodos get
public Display getDisplay() {
return Display.getDisplay(this);

}
public void exitMIDlet() {
getDisplay().setCurrent(null);
destroyApp(true);
notifyDestroyed();
}

/** This method returns instance for helloForm component and should be called instead of accessing
helloForm field directly.
* @return Instance for helloForm component
*/
public Form get_helloForm() {
if (helloForm == null) {
helloForm = new Form(null, new Item[] {
get_stringItem2(),
get_a(),
get_b(),
get_c(),
get_spacer1(),
get_calcular(),
get_status(),
x1,
get_x2(),
get_stringItem1()
});
helloForm.addCommand(get_exitCommand());
helloForm.setCommandListener(this);
}
return helloForm;
ESPE Pgina 14
15

}
/** This method returns instance for exitCommand component and should be called instead of
accessing exitCommand field directly.
* @return Instance for exitCommand component
*/
public Command get_exitCommand() {
if (exitCommand == null) {

exitCommand = new Command("Salir", Command.EXIT, 1);


// Insert post-init code here
}
return exitCommand;
}
/** This method returns instance for a component and should be called instead of accessing a field
directly.
* @return Instance for a component
*/
public TextField get_a() {
if (a == null) {
// Insert pre-init code here
a = new TextField("a:", "", 120, TextField.DECIMAL | TextField.NON_PREDICTIVE);
a.addCommand(get_itemCommand4());
a.setItemCommandListener(this);
// Insert post-init code here
}
return a;
}

/** This method returns instance for b component and should be called instead of accessing b field
directly.
* @return Instance for b component
*/
public TextField get_b() {
if (b == null) {
// Insert pre-init code here
b = new TextField("b:", "", 120, TextField.DECIMAL | TextField.NON_PREDICTIVE);
b.addCommand(get_itemCommand5());
b.setItemCommandListener(this);
// Insert post-init code here
}
return b;
}

/** This method returns instance for c component and should be called instead of accessing c field
directly.
* @return Instance for c component
*/
public TextField get_c() {
if (c == null) {
// Insert pre-init code here
c = new TextField("c:", "", 120, TextField.DECIMAL | TextField.NON_PREDICTIVE);
ESPE Pgina 15
16

c.addCommand(get_itemCommand6());
c.setItemCommandListener(this);
// Insert post-init code here
}
return c;
}

/** This method returns instance for spacer1 component and should be called instead of accessing
spacer1 field directly.
* @return Instance for spacer1 component
*/
public Spacer get_spacer1() {
if (spacer1 == null) {
// Insert pre-init code here
spacer1 = new Spacer(1000, 1);
// Insert post-init code here
}
return spacer1;
}

/** This method returns instance for calcular component and should be called instead of accessing
calcular field directly.
* @return Instance for calcular component
*/
public StringItem get_calcular() {
if (calcular == null) {

calcular = new StringItem("", "Calcular", javax.microedition.lcdui.Item.BUTTON);


calcular.addCommand(get_itemCommand3());
calcular.setItemCommandListener(this);
calcular.setDefaultCommand(get_itemCommand3());
}
return calcular;
}
/** This method returns instance for x2 component and should be called instead of accessing x2 field
directly.
* @return Instance for x2 component
*/
public TextField get_x2() {
if (x2 == null) {
// Insert pre-init code here
x2 = new TextField("x2=", null, 120, TextField.ANY);
// Insert post-init code here
}
return x2;
}
/** This method returns instance for itemCommand1 component and should be called instead of
accessing itemCommand1 field directly.
* @return Instance for itemCommand1 component
*/
public Command get_itemCommand1() {
ESPE Pgina 16
17

if (itemCommand1 == null) {
// Insert pre-init code here
itemCommand1 = new Command("Item", Command.ITEM, 1);
// Insert post-init code here
}
return itemCommand1;
}
/** This method returns instance for itemCommand2 component and should be called instead of
accessing itemCommand2 field directly.
* @return Instance for itemCommand2 component
*/
public Command get_itemCommand2() {
if (itemCommand2 == null) {
// Insert pre-init code here
itemCommand2 = new Command("Item", Command.ITEM, 1);
// Insert post-init code here
}
return itemCommand2;
}
/** This method returns instance for itemCommand3 component and should be called instead of
accessing itemCommand3 field directly.
* @return Instance for itemCommand3 component
*/
public Command get_itemCommand3() {
if (itemCommand3 == null) {
// Insert pre-init code here
itemCommand3 = new Command("Calcular", Command.OK, 1);
// Insert post-init code here
}
return itemCommand3;
}

/** This method returns instance for status component and should be called instead of accessing status
field directly.
* @return Instance for status component
*/
public StringItem get_status() {
if (status == null) {
// Insert pre-init code here
status = new StringItem("", "");
// Insert post-init code here
}
return status;
}

/** This method returns instance for itemCommand4 component and should be called instead of
accessing itemCommand4 field directly.
* @return Instance for itemCommand4 component
*/
ESPE Pgina 17
18

public Command get_itemCommand4() {


if (itemCommand4 == null) {
// Insert pre-init code here
itemCommand4 = new Command("Negativo(-)", Command.ITEM, 1);

}
return itemCommand4;
}

/** This method returns instance for itemCommand5 component and should be called instead of
accessing itemCommand5 field directly.
* @return Instance for itemCommand5 component
*/
public Command get_itemCommand5() {
if (itemCommand5 == null) {
// Insert pre-init code here
itemCommand5 = new Command("Negativo(-)", Command.ITEM, 1);
// Insert post-init code here
}
return itemCommand5;
}

/** This method returns instance for itemCommand6 component and should be called instead of
accessing itemCommand6 field directly.
* @return Instance for itemCommand6 component
*/
public Command get_itemCommand6() {
if (itemCommand6 == null) {
// Insert pre-init code here
itemCommand6 = new Command("Negativo(-)", Command.ITEM, 1);
// Insert post-init code here
}
return itemCommand6;
}

/** This method returns instance for stringItem2 component and should be called instead of accessing
stringItem2 field directly.
* @return Instance for stringItem2 component
*/
public StringItem get_stringItem2() {
if (stringItem2 == null) {
// Insert pre-init code here
stringItem2 = new StringItem("Ingrese los valores seg\u00F9n corresponda:", "");
// Insert post-init code here
}
return stringItem2;
}

/** This method returns instance for splashScreen1 component and should be called instead of
accessing splashScreen1 field directly.
* @return Instance for splashScreen1 component
ESPE Pgina 18
19

*/
public org.netbeans.microedition.lcdui.SplashScreen get_splashScreen1() {
if (splashScreen1 == null) {
// Insert pre-init code here
splashScreen1 = new org.netbeans.microedition.lcdui.SplashScreen(getDisplay());
splashScreen1.setTitle("Bienvenido");
splashScreen1.setImage(get_image1());
splashScreen1.setNextDisplayable(get_helloForm());
splashScreen1.setTimeout(1200);
// Insert post-init code here
}
return splashScreen1;
}

/** This method returns instance for image1 component and should be called instead of accessing
image1 field directly.
* @return Instance for image1 component
*/
public Image get_image1() {
if (image1 == null) {
// Insert pre-init code here
try {
image1 = Image.createImage("/hello/bmp.PNG");
} catch (java.io.IOException exception) {
}
// Insert post-init code here
}
return image1;
}

/** This method returns instance for exitCommand1 component and should be called instead of
accessing exitCommand1 field directly.
* @return Instance for exitCommand1 component
*/
public Command get_exitCommand1() {
if (exitCommand1 == null) {
// Insert pre-init code here
exitCommand1 = new Command("Exit", Command.EXIT, 1);
// Insert post-init code here
}
return exitCommand1;
}

/** This method returns instance for stringItem1 component and should be called instead of accessing
stringItem1 field directly.
* @return Instance for stringItem1 component
*/
public StringItem get_stringItem1() {
if (stringItem1 == null) {
// Insert pre-init code here
ESPE Pgina 19
20

stringItem1 = new StringItem("", "\n ");


// Insert post-init code here
}
return stringItem1;
}
Creamos un archivo de tipo xml con el nombre de Operacion y al momento de poner el nombre
cambiamos la extensin a mvd:

Una vez que se crea el archivo XML damos clic derecho y en propiedades, seleccionamos extensin
y cambiamos a mvd y damos y aceptamos

ESPE Pgina 20
21

Dentro de este archivo Operacin.mvd definiremos los contenedores que tiene la interfaz, tanto
de los datos de entrada como los de salida, y los botones para calcular y salir.
<?xml version="1.0" encoding="UTF-8"?>
<MVDData version="1.2">
<DesignDocument designVersion="MIDP-2" uidCounter="66">
<DesignComponent id="$MobileDevice" typeid="MIDP:$MobileDevice" uid="0"/>
<DesignComponent id="$StartPoint" typeid="MIDP:$StartPoint" uid="1">
<Property name="targetDisplayable" value="helloForm"/>
<Property name="targetForwardDisplayable"/>
</DesignComponent>
<DesignComponent id="helloForm" typeid="MIDP:javax.microedition.lcdui.Form" uid="2">
<ContainerProperty name="commands">
<ContainerPropertyItem value="$CommandAction"/>
</ContainerProperty>
<ContainerProperty name="items">
<ContainerPropertyItem value="stringItem2"/>
<ContainerPropertyItem value="a"/>
<ContainerPropertyItem value="b"/>
<ContainerPropertyItem value="c"/>
<ContainerPropertyItem value="spacer1"/>
<ContainerPropertyItem value="calcular"/>
<ContainerPropertyItem value="status"/>
<ContainerPropertyItem value="x1"/>
<ContainerPropertyItem value="x2"/>
<ContainerPropertyItem value="stringItem1"/>
</ContainerProperty>
</DesignComponent>
<DesignComponent id="$CommandAction" typeid="MIDP:CommandAction" uid="3">
<Property name="targetDisplayable" value="$MobileDevice"/>
<Property name="targetForwardDisplayable"/>
<Property name="actionSource" value="exitCommand"/>
<Property name="actionOrigin" value="helloForm"/>
</DesignComponent>
<DesignComponent id="exitCommand" typeid="MIDP:javax.microedition.lcdui.Command"
uid="5">
<Property name="label" value="STRING:Salir"/>
<Property name="priority" value="1"/>
<Property name="type" value="EXIT"/>
</DesignComponent>
<DesignComponent id="a" typeid="MIDP:javax.microedition.lcdui.TextField" uid="6">
<Property name="label" value="STRING:a:"/>
<Property name="string" value="STRING:"/>
<Property name="maxSize" value="120"/>
<Property name="constraints" value="524293"/>
<ContainerProperty name="commands">
<ContainerPropertyItem value="$ItemCommandAction2"/>
</ContainerProperty>
</DesignComponent>
<DesignComponent id="b" typeid="MIDP:javax.microedition.lcdui.TextField" uid="7">
<Property name="label" value="STRING:b:"/>
<Property name="string" value="STRING:"/>
ESPE Pgina 21
22

<Property name="maxSize" value="120"/>


<Property name="constraints" value="524293"/>
<ContainerProperty name="commands">
<ContainerPropertyItem value="$ItemCommandAction3"/>
</ContainerProperty>
</DesignComponent>
<DesignComponent id="c" typeid="MIDP:javax.microedition.lcdui.TextField" uid="8">
<Property name="label" value="STRING:c:"/>
<Property name="string" value="STRING:"/>
<Property name="maxSize" value="120"/>
<Property name="constraints" value="524293"/>
<ContainerProperty name="commands">
<ContainerPropertyItem value="$ItemCommandAction4"/>
</ContainerProperty>
</DesignComponent>
<DesignComponent id="spacer1" typeid="MIDP-2:javax.microedition.lcdui.Spacer" uid="9">
<Property name="minWidth" value="1000"/>
<Property name="minHeight" value="1"/>
</DesignComponent>
<DesignComponent id="calcular" typeid="MIDP:javax.microedition.lcdui.StringItem"
uid="10">
<Property name="label" value="STRING:"/>
<Property name="text" value="STRING:Calcular"/>
<Property name="appearanceMode" value="BUTTON"/>
<Property name="defaultCommand" value="itemCommand3"/>
<ContainerProperty name="commands">
<ContainerPropertyItem value="$ItemCommandAction1"/>
</ContainerProperty>
</DesignComponent>
<DesignComponent id="x1" typeid="MIDP:javax.microedition.lcdui.TextField" uid="11">
<Property name="label" value="STRING:x1="/>
<Property name="maxSize" value="120"/>
<ContainerProperty name="commands"/>
<Property name="lazyInitialized" value="false"/>
</DesignComponent>
<DesignComponent id="x2" typeid="MIDP:javax.microedition.lcdui.TextField" uid="12">
<Property name="label" value="STRING:x2="/>
<Property name="maxSize" value="120"/>
<ContainerProperty name="commands"/>
</DesignComponent>
<DesignComponent id="itemCommand1" typeid="MIDP:javax.microedition.lcdui.Command"
uid="13">
<Property name="label" value="STRING:Item"/>
<Property name="priority" value="1"/>
<Property name="type" value="ITEM"/>
</DesignComponent>
<DesignComponent id="itemCommand2" typeid="MIDP:javax.microedition.lcdui.Command"
uid="14">
<Property name="label" value="STRING:Item"/>
<Property name="priority" value="1"/>
<Property name="type" value="ITEM"/>
ESPE Pgina 22
23

</DesignComponent>
<DesignComponent id="itemCommand3" typeid="MIDP:javax.microedition.lcdui.Command"
uid="15">
<Property name="label" value="STRING:Calcular"/>
<Property name="priority" value="1"/>
<Property name="type" value="OK"/>
</DesignComponent>
<DesignComponent id="$ItemCommandAction1" typeid="MIDP-2:ItemCommandAction"
uid="18">
<Property name="preUserCode"/>
<Property name="postUserCode"/>
<Property name="targetDisplayable"/>
<Property name="targetForwardDisplayable"/>
<Property name="actionSource" value="itemCommand3"/>
<Property name="actionOrigin" value="calcular"/>
</DesignComponent>
<DesignComponent id="status" typeid="MIDP:javax.microedition.lcdui.StringItem"
uid="27">
<Property name="label" value="STRING:"/>
<Property name="text" value="STRING:"/>
<ContainerProperty name="commands"/>
</DesignComponent>
<DesignComponent id="itemCommand4" typeid="MIDP:javax.microedition.lcdui.Command"
uid="47">
<Property name="label" value="STRING:Negativo(-)"/>
<Property name="priority" value="1"/>
<Property name="type" value="ITEM"/>
</DesignComponent>
<DesignComponent id="$ItemCommandAction2" typeid="MIDP-2:ItemCommandAction"
uid="50">
<Property name="preUserCode"/>
<Property name="postUserCode"/>
<Property name="targetDisplayable"/>
<Property name="targetForwardDisplayable"/>
<Property name="actionSource" value="itemCommand4"/>
<Property name="actionOrigin" value="a"/>
</DesignComponent>
<DesignComponent id="itemCommand5" typeid="MIDP:javax.microedition.lcdui.Command"
uid="51">
<Property name="label" value="STRING:Negativo(-)"/>
<Property name="priority" value="1"/>
<Property name="type" value="ITEM"/>
</DesignComponent>
<DesignComponent id="$ItemCommandAction3" typeid="MIDP-2:ItemCommandAction"
uid="52">
<Property name="preUserCode"/>
<Property name="postUserCode"/>
<Property name="targetDisplayable"/>
<Property name="targetForwardDisplayable"/>
<Property name="actionSource" value="itemCommand5"/>
<Property name="actionOrigin" value="b"/>
ESPE Pgina 23
24

</DesignComponent>
<DesignComponent id="itemCommand6" typeid="MIDP:javax.microedition.lcdui.Command"
uid="53">
<Property name="label" value="STRING:Negativo(-)"/>
<Property name="priority" value="1"/>
<Property name="type" value="ITEM"/>
</DesignComponent>
<DesignComponent id="$ItemCommandAction4" typeid="MIDP-2:ItemCommandAction"
uid="54">
<Property name="preUserCode"/>
<Property name="postUserCode"/>
<Property name="targetDisplayable"/>
<Property name="targetForwardDisplayable"/>
<Property name="actionSource" value="itemCommand6"/>
<Property name="actionOrigin" value="c"/>
</DesignComponent>
<DesignComponent id="stringItem2" typeid="MIDP:javax.microedition.lcdui.StringItem"
uid="55">
<Property name="label" value="STRING:Ingrese los valores seg\u00F9n corresponda:"/>
<Property name="text" value="STRING:"/>
<ContainerProperty name="commands"/>
</DesignComponent>
<DesignComponent id="splashScreen1" typeid="MIDP-
2:org.netbeans.microedition.lcdui.SplashScreen" uid="57">
<Property name="timeout" value="1200"/>
<Property name="image" value="image1"/>
<Property name="nextDisplayableAction" value="$InfoScreenAction1"/>
<Property name="title" value="STRING:Bienvenido"/>
<ContainerProperty name="commands"/>
</DesignComponent>
<DesignComponent id="$InfoScreenAction1" typeid="MIDP:$InfoScreenAction" uid="58">
<Property name="actionType" value="1"/>
<Property name="targetDisplayable" value="helloForm"/>
<Property name="targetForwardDisplayable" value="helloForm"/>
<Property name="actionSource"/>
<Property name="actionOrigin" value="splashScreen1"/>
</DesignComponent>
<DesignComponent id="image1" typeid="MIDP:javax.microedition.lcdui.Image" uid="59">
<Property name="imageResourcePath" value="/hello/bmp.PNG"/>
</DesignComponent>
<DesignComponent id="exitCommand1" typeid="MIDP:javax.microedition.lcdui.Command"
uid="60">
<Property name="label" value="STRING:Exit"/>
<Property name="priority" value="1"/>
<Property name="type" value="EXIT"/>
</DesignComponent>
<DesignComponent id="stringItem1" typeid="MIDP:javax.microedition.lcdui.StringItem"
uid="65">
<Property name="label" value="STRING:"/>
<Property name="text" value="STRING:\n "/>
<ContainerProperty name="commands"/>
ESPE Pgina 24
25

</DesignComponent>
</DesignDocument>
<FlowDocument version="1.1">
<Node id="$MobileDevice" location="160,192" order=",$StartPoint,,,,,,,,,$ExitPoint,,,,,"/>
<Node id="helloForm" location="384,192" order="$CommandAction,,,,,,,,,,$Default,,,,,"/>
<Node id="splashScreen1" location="656,128"
order="$InfoScreenAction1$ActionFlowPort$1,,,,,,,,,,$Default,,,,,"/>
<Link id="$StartPoint$ActionLink" path="200,168,344,168"/>
<Link id="$CommandAction$ActionLink"
path="424,184,512,184,512,112,47,112,47,168,120,168"/>
<Link id="$InfoScreenAction1$ActionLink"
path="696,120,762,120,762,229,298,229,298,168,344,168"/>
</FlowDocument>
</MVDData>
EJECUCIN DE LA APLICACIN

Hacemos clic en el boton que esta debajo de el texto Launch

ESPE Pgina 25
26

Introducimos los valores correspondientes, la forma de la ecuacin es ax^2+bx+c, introducimos los


coeficientes, para movilizarnos usamos las flechas de arriba y abajo del simulador del telfono.

ESPE Pgina 26
27

Una vez que ingresamos los coeficientes de la ecuacin solo seleccionamos calcular como se ve
a continuacin.

ESPE Pgina 27
28

ESPE Pgina 28
29

Aplicacin 2
Ahora estamos en la pestaa Flow, aqu agregamos un form arrastrndolo de la parte derecha de
nuestro netbeans

Dentro de este form agregaremos un jitem haciendo clic derecho en el form, clic en add y clic en
itemcommand

Repetimos este procedimiento tres veces mas hasta tener lo siguiente

ESPE Pgina 29
30

Renombramos estos itemcommand de la siguiente maner

Y le damos los nombres de las cuatro operaciones bsicas

ESPE Pgina 30
31

Agregamos un exit command

Hacemos clic dentro de mobile device en started y arrastramos hasta el form

ESPE Pgina 31
32

Y del exit command hacemos clic y arrastramos hasta Resumed

Ahora en la pestaa screen seleccionamos clic derecho y add, clic en textfield

ESPE Pgina 32
33

Agregamos dos mas del mismo tipo


Damos nombres a los labels

Damos nombre a los textfield

ESPE Pgina 33
34

Hacemos clic derecho en suma y clic en go to source

Declaramos las variables para almacenar los datos de ingreso

ESPE Pgina 34
35

Definimos dentro de la opcin suma los mtodos get para obtener el valor de los campos de texto

Hacemos este procedimiento para las dems operaciones, tomando en cuenta que tenemos que hacer
clic derecho en cada opcin que implementamos en el form.
Quedando nuestro cdigo de la siguiente manera
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
ESPE Pgina 35
36

/**
* @author DiegoYandun
*/
public class cal extends MIDlet implements CommandListener {

private boolean midletPaused = false;


double valor1 = 0, valor2 = 0, resultado=0;

//<editor-fold defaultstate="collapsed" desc=" Generated Fields ">


private Form form;
private TextField a;
private TextField b;
private StringItem r;
private Command suma;
private Command resta;
private Command multiplicacion;
private Command division;
private Command backCommand;
private Command exitCommand;
//</editor-fold>
/**
* The cal constructor.
*/
public cal() {
}

//<editor-fold defaultstate="collapsed" desc=" Generated Methods ">


//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Method: initialize ">


/**
* Initializes the application. It is called only once when the MIDlet is
* started. The method is called before the <code>startMIDlet</code> method.
*/
private void initialize() {

// write pre-initialize user code here

// write post-initialize user code here


}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Method: startMIDlet ">


/**
* Performs an action assigned to the Mobile Device - MIDlet Started point.
*/
public void startMIDlet() {

// write pre-action user code here


switchDisplayable(null, getForm());
ESPE Pgina 36
37

// write post-action user code here


}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Method: resumeMIDlet ">


/**
* Performs an action assigned to the Mobile Device - MIDlet Resumed point.
*/
public void resumeMIDlet() {

// write pre-action user code here

// write post-action user code here


}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Method: switchDisplayable ">


/**
* Switches a current displayable in a display. The <code>display</code>
* instance is taken from <code>getDisplay</code> method. This method is
* used by all actions in the design for switching displayable.
*
* @param alert the Alert which is temporarily set to the display; if
* <code>null</code>, then <code>nextDisplayable</code> is set immediately
* @param nextDisplayable the Displayable to be set
*/
public void switchDisplayable(Alert alert, Displayable nextDisplayable) {

// write pre-switch user code here


Display display = getDisplay();
if (alert == null) {
display.setCurrent(nextDisplayable);
} else {
display.setCurrent(alert, nextDisplayable);
}
// write post-switch user code here
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Method: commandAction for Displayables


">
/**
* Called by a system to indicated that a command has been invoked on a
* particular displayable.
*
* @param command the Command that was invoked
* @param displayable the Displayable where the command was invoked
*/
public void commandAction(Command command, Displayable displayable) {

// write pre-action user code here


ESPE Pgina 37
38

if (displayable == form) {
if (command == division) {
valor1 = Double.parseDouble(a.getString());
valor2 = Double.parseDouble(b.getString());
if(valor2==0)
r.setText("Valor Indeterminado");
else{
resultado = valor1 / valor2;
r.setText(String.valueOf(resultado));
}

// write post-action user code here


} else if (command == exitCommand) {
// write pre-action user code here
exitMIDlet();
// write post-action user code here
} else if (command == multiplicacion) {
valor1 = Double.parseDouble(a.getString());
valor2 = Double.parseDouble(b.getString());
resultado = valor1 * valor2;
r.setText(String.valueOf(resultado));

// write post-action user code here


} else if (command == resta) {
valor1 = Double.parseDouble(a.getString());
valor2 = Double.parseDouble(b.getString());
resultado = valor1 - valor2;
r.setText(String.valueOf(resultado));

// write post-action user code here


} else if (command == suma) {
valor1 = Double.parseDouble(a.getString());
valor2 = Double.parseDouble(b.getString());
resultado = valor1 +valor2;
r.setText(String.valueOf(resultado));

// write post-action user code here


}
}
// write post-action user code here
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: form ">


/**
* Returns an initialized instance of form component.
*
* @return the initialized component instance
*/
public Form getForm() {
if (form == null) {
ESPE Pgina 38
39

// write pre-init user code here


form = new Form("form", new Item[]{getA(), getB(), getR()});
form.addCommand(getSuma());
form.addCommand(getResta());
form.addCommand(getMultiplicacion());
form.addCommand(getDivision());
form.addCommand(getExitCommand());
form.setCommandListener(this);
// write post-init user code here
}
return form;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: a ">


/**
* Returns an initialized instance of a component.
*
* @return the initialized component instance
*/
public TextField getA() {
if (a == null) {

// write pre-init user code here


a = new TextField("Ingrese el primer numero", null, 32, TextField.ANY);
// write post-init user code here
}
return a;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: b ">


/**
* Returns an initialized instance of b component.
*
* @return the initialized component instance
*/
public TextField getB() {
if (b == null) {

// write pre-init user code here


b = new TextField("Ingrese el segundo numero", null, 32, TextField.ANY);
// write post-init user code here
}
return b;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: r ">


/**
ESPE Pgina 39
40

* Returns an initialized instance of r component.


*
* @return the initialized component instance
*/
public StringItem getR() {
if (r == null) {

// write pre-init user code here


r = new StringItem("Resultado", null);
// write post-init user code here
}
return r;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: suma ">


/**
* Returns an initialized instance of suma component.
*
* @return the initialized component instance
*/
public Command getSuma() {
if (suma == null) {

// write pre-init user code here


suma = new Command("sumar", Command.ITEM, 0);
// write post-init user code here
}
return suma;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: resta ">


/**
* Returns an initialized instance of resta component.
*
* @return the initialized component instance
*/
public Command getResta() {
if (resta == null) {

// write pre-init user code here


resta = new Command("restar", Command.ITEM, 0);
// write post-init user code here
}
return resta;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: multiplicacion ">


/**
ESPE Pgina 40
41

* Returns an initialized instance of multiplicacion component.


*
* @return the initialized component instance
*/
public Command getMultiplicacion() {
if (multiplicacion == null) {

// write pre-init user code here


multiplicacion = new Command("multiplicaar", Command.ITEM, 0);
// write post-init user code here
}
return multiplicacion;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: division ">


/**
* Returns an initialized instance of division component.
*
* @return the initialized component instance
*/
public Command getDivision() {
if (division == null) {

// write pre-init user code here


division = new Command("dividir", Command.ITEM, 0);
// write post-init user code here
}
return division;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: backCommand ">


/**
* Returns an initialized instance of backCommand component.
*
* @return the initialized component instance
*/
public Command getBackCommand() {
if (backCommand == null) {

// write pre-init user code here


backCommand = new Command("Back", Command.BACK, 0);
// write post-init user code here
}
return backCommand;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc=" Generated Getter: exitCommand ">


/**
ESPE Pgina 41
42

* Returns an initialized instance of exitCommand component.


*
* @return the initialized component instance
*/
public Command getExitCommand() {
if (exitCommand == null) {

// write pre-init user code here


exitCommand = new Command("Exit", Command.EXIT, 0);
// write post-init user code here
}
return exitCommand;
}
//</editor-fold>

/**
* Returns a display instance.
*
* @return the display instance.
*/
public Display getDisplay() {
return Display.getDisplay(this);
}

/**
* Exits MIDlet.
*/
public void exitMIDlet() {
switchDisplayable(null, null);
destroyApp(true);
notifyDestroyed();
}

/**
* Called when MIDlet is started. Checks whether the MIDlet have been
* already started and initialize/starts or resumes the MIDlet.
*/
public void startApp() {
if (midletPaused) {
resumeMIDlet();
} else {
initialize();
startMIDlet();
}
midletPaused = false;
}

/**
* Called when MIDlet is paused.
*/
public void pauseApp() {
ESPE Pgina 42
43

midletPaused = true;
}

/**
* Called to signal the MIDlet to terminate.
*
* @param unconditional if true, then the MIDlet has to be unconditionally
* terminated and all resources has to be released.
*/
public void destroyApp(boolean unconditional) {
}

Ejecutando la Aplicacin
Ingresamos los valores de a y de b respectivamente

Seleccionamos la opcin Menu

ESPE Pgina 43
44

Seleccionamos la opcin que deseamos, puede ser cualquiera de las 4 operaciones

ESPE Pgina 44
45

ESPE Pgina 45
46

Aplicaciones Android
Aplicacin 1
1. Crearemos un nuevo Activity en el cual crearemos un SplashScreen

Le asignamos un tema al Activity

Le asignaremos una imagen al Activity, para esto las imgenes deben estar guardadas en
nuestro drawable

ESPE Pgina 46
47

Tenemos que configurar que se inicie primero nuestro SplashScreen por lo cual debemos
modificar el Manifest del proyecto
Cdigo normal
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.crist.dinosauriosapp">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".DinosauriosAppActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<activity android:name=".SplashScreen"></activity>
</application>

</manifest>

Cdigo Modificado
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.crist.dinosauriosapp">

<application
android:allowBackup="true"

ESPE Pgina 47
48

android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".DinosauriosAppActivity">

</activity>
<activity android:name=".SplashScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>

</manifest>

2. En el SlashScreen haremos que se inicie, espero unos Segundo y pase al siguiente activity, el
cdigo seria el siguiente
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.crist.dinosauriosapp">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".DinosauriosAppActivity">

</activity>
<activity android:name=".SplashScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>

<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
3. En el otro activity creamos dos botones, esto para los tipos de dinosaurios que tendremos

ESPE Pgina 48
49

Cdigo de activity
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_dinosaurios_app"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.crist.dinosauriosapp.DinosauriosAppActivity">

<Button
android:text="Saurisquios"
android:layout_width="wrap_content"
android:layout_height="108dp"
android:id="@+id/btnTipo1"
android:layout_weight="1"
android:layout_marginTop="51dp"
android:layout_below="@+id/textView3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textSize="20sp" />

<Button
android:text="Ornitrisquios"
android:layout_width="wrap_content"
ESPE Pgina 49
50

android:layout_height="108dp"
android:id="@+id/btnTipo2"
android:layout_weight="1"
android:layout_below="@+id/btnTipo1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="48dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textSize="20sp" />

<TextView
android:text="Tipos de Dinosaurios"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView3"
android:textSize="30sp"
android:textStyle="normal|bold"
android:textAlignment="textEnd"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />

</RelativeLayout>

4. Creamos un nuevo activity en el cual vamos a poner la primera clase de dinosaurios

ESPE Pgina 50
51

Empezaremos creando un LinearLayout Vertical


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:baselineAligned="false">

</LinearLayout>

Como queremos poner las especies de dinosaurios en el mismo Layout, se har uso de la
herramienta ScrollView, el cual me permitir moverme en toda la activity
Implementaremos una imagen, texto de ttulo e informacin por cada especie

Para la informacion de la especie se crearon String en la carpeta resources/values

El cdigo del activity seria:


<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
ESPE Pgina 51
52

android:baselineAligned="false">

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"

>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="1">
<!--- Imagen 1 -->
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/arqueteonix"
android:scaleType="fitXY"
android:id="@+id/imageView"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Arqueopterix "
android:textStyle="normal|bold"
android:textAlignment="center"
android:textSize="22sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/arqueopterix.txt"
android:textAlignment="viewStart"
android:layout_weight="0.02" />
<!--- Imagen 2 -->
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/velociraptor"
android:scaleType="fitXY"
android:id="@+id/imageView2"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Velociraptor "
android:textSize="22sp"
android:textStyle="normal|bold"
android:textAlignment="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/velociraptor.txt"
/>
<!--- Imagen 3 -->
<ImageView
ESPE Pgina 52
53

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/tiranosaurio"
android:scaleType="fitXY"
android:id="@+id/imageView3"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tiranosaurio "
android:textStyle="normal|bold"
android:textAlignment="center"
android:textSize="22sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/tiranosaurio.txt"
/>
</LinearLayout>

</ScrollView>

</LinearLayout>

5. A su vez creamos un segundo activity en el cual se pondr la siguiente clase


Realizamos lo mismo para la segunda especie

Creamos los siguientes string para las otras especies

ESPE Pgina 53
54

El cdigo del activity seria:


<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:baselineAligned="false">

<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"

>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="1">
<!--- Imagen 1 -->

<TextView
android:text="ORNITRISQUIOS"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView6"
android:textColor="@android:color/holo_green_light"
android:textSize="24sp"
android:textStyle="normal|bold" />

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/tuojiangosaurio"
android:scaleType="fitXY"
android:id="@+id/imageView"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tuojiangosaurio"
android:textStyle="normal|bold"
android:textAlignment="center"
ESPE Pgina 54
55

android:textSize="22sp" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/tuojiangosaurio.txt"
android:layout_weight="0.02"
android:id="@+id/textView4" />
<!--- Imagen 2 -->
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/protoceratops"
android:scaleType="fitXY"
android:id="@+id/imageView2"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Protoceraptops "
android:textSize="22sp"
android:textStyle="normal|bold"
android:textAlignment="center" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/protoceratops.txt"
/>
<!--- Imagen 3 -->
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/triceratops"
android:scaleType="fitXY"
android:id="@+id/imageView3"
/>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Triceraptops "
android:textStyle="normal|bold"
android:textAlignment="center"
android:textSize="22sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/triceratops.txt"
/>
</LinearLayout>

</ScrollView>

</LinearLayout>
6. Programamos los botones para que nos direcciones a las otras activities
ESPE Pgina 55
56

7. package com.example.crist.dinosauriosapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class DinosauriosAppActivity extends AppCompatActivity {

Button btnClase1,btnClase2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dinosaurios_app);
btnClase1=(Button)findViewById(R.id.btnTipo1);
btnClase2=(Button)findViewById(R.id.btnTipo2);
btnClase1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent1= new
Intent(DinosauriosAppActivity.this,Clase1.class);
startActivity(intent1);
}
});
btnClase2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent2= new
Intent(DinosauriosAppActivity.this,Clase2.class);
startActivity(intent2);
}
});
}
}

ESPE Pgina 56
57

Capturas de pantalla

ESPE Pgina 57
58

ESPE Pgina 58
59

ESPE Pgina 59
60

ESPE Pgina 60
61

Aplicacin 2
1. Creamos el Activity en donde vamos a crear nuestro cdigo xml

2. En el Activity xml, creamos los botones en los cuales vamos a usar para realizar el juego
Creamos un botn, luego creamos los otros botones

Aqu el cdigo que debemos tener en nuestro Activity, en el cual se creara los 9 botones y se
le asigna una imagen
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_tic_tac_toe"
android:layout_width="match_parent"
android:layout_height="match_parent"
ESPE Pgina 61
62

android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.crist.tictactoe.TicTacToeActivity">

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btna1"
android:layout_alignBottom="@+id/btnA2"
android:layout_alignLeft="@+id/btnA4"
android:layout_alignStart="@+id/btnA4"
android:layout_alignTop="@+id/btnA2" />

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btnA2"
android:layout_marginBottom="12dp"
android:layout_above="@+id/btnA5"
android:layout_alignLeft="@+id/btnA5"
android:layout_alignStart="@+id/btnA5" />

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btna3"
android:layout_alignBottom="@+id/btnA2"
android:layout_alignLeft="@+id/btnA6"
android:layout_alignStart="@+id/btnA6"
android:layout_alignTop="@+id/btnA2" />

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btnA4"
android:layout_alignBottom="@+id/btnA5"
android:layout_toLeftOf="@+id/btnA5"
android:layout_toStartOf="@+id/btnA5"
android:layout_alignTop="@+id/btnA5"
android:layout_marginRight="16dp"
/>

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btnA5"
android:layout_marginBottom="185dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />

ESPE Pgina 62
63

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btnA6"
android:layout_alignBottom="@+id/btnA5"
android:layout_toRightOf="@+id/btnA5"
android:layout_toEndOf="@+id/btnA5"
android:layout_alignTop="@+id/btnA5"
android:layout_marginLeft="16dp"/>

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btna7"
android:layout_alignBottom="@+id/btnA8"
android:layout_alignLeft="@+id/btnA4"
android:layout_alignStart="@+id/btnA4"
android:layout_alignTop="@+id/btnA8" />

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btnA8"
android:layout_below="@+id/btnA6"
android:layout_toRightOf="@+id/btnA4"
android:layout_toEndOf="@+id/btnA4"
android:layout_marginTop="16dp" />

<Button
android:layout_width="64dp"
android:layout_height="64dp"
android:background="@drawable/t"
android:id="@+id/btna9"
android:layout_alignBottom="@+id/btnA8"
android:layout_alignLeft="@+id/btnA6"
android:layout_alignStart="@+id/btnA6"
android:layout_alignTop="@+id/btnA8" />

<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/btna1"
android:layout_alignStart="@+id/btna1"
android:layout_marginTop="58dp"
android:id="@+id/textView" />

</RelativeLayout>

3. En el drawable insertaremos las imgenes con las cuales al presionar el botn se cambiara

ESPE Pgina 63
64

4. En el activity creamos los elementos que vamos a utilizer, los cuales sern 9 botones, y un
textview, adems se creara una matriz de botones.
protected Button a1,a2,a3,b1,b2,b3,c1,c2,c3;
protected Button []ArrButton;
int [][] unaMatriz;
int contador;
TextView etiqueta;
Boolean turno;
5. Creamos nuestras otras funciones en el Activity, el cdigo completo del Activity
6. package com.example.crist.tictactoe;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class TicTacToeActivity extends AppCompatActivity implements


View.OnClickListener{

protected Button a1,a2,a3,b1,b2,b3,c1,c2,c3;


protected Button []ArrButton;
int [][] unaMatriz;
int contador;
TextView etiqueta;
Boolean turno;

//Funcion creada para incializar la matriz


public void init(){
unaMatriz=new int[3][3];
ESPE Pgina 64
65

for (int i=0;i<3;i++){


for (int j=0;j<3;j++){
unaMatriz[i][j]=R.drawable.t;
}
}
turno=false;
contador=0;
}
//Funcion OnCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tic_tac_toe);
a1=(Button)findViewById(R.id.btna1);
a2=(Button)findViewById(R.id.btnA2);
a3=(Button)findViewById(R.id.btna3);
b1=(Button)findViewById(R.id.btnA4);
b2=(Button)findViewById(R.id.btnA5);
b3=(Button)findViewById(R.id.btnA6);
c1=(Button)findViewById(R.id.btna7);
c2=(Button)findViewById(R.id.btnA8);
c3=(Button)findViewById(R.id.btna9);
etiqueta=(TextView) findViewById(R.id.textView);
this.init();
ArrButton=new Button[]{a1,a2,a3,b1,b2,b3,c1,c2,c3};
for (Button b : ArrButton) {
b.setOnClickListener(this);
}
}
//Funcion implementada cuando se de click en los botones
@Override
public void onClick(View view) {
Button b=(Button)view;
this.click(b);

}
//Asignamos las imagenes a nuestros botones cuando se presionen
private void click(Button b){
int x=0;
if(turno){
x=R.drawable.equis;
b.setBackgroundResource(x);
}else{
x=R.drawable.cero;
b.setBackgroundResource(x);
}
switch (b.getId()){
case R.id.btna1:
unaMatriz[0][0]=x;
break;
case R.id.btnA2:
unaMatriz[0][1]=x;
break;
case R.id.btna3:
unaMatriz[0][2]=x;
break;
case R.id.btnA4:
ESPE Pgina 65
66

unaMatriz[1][0]=x;
break;
case R.id.btnA5:
unaMatriz[1][1]=x;
break;
case R.id.btnA6:
unaMatriz[1][2]=x;
break;
case R.id.btna7:
unaMatriz[2][0]=x;
break;
case R.id.btnA8:
unaMatriz[2][1]=x;
break;
case R.id.btna9:
unaMatriz[2][2]=x;
break;
}
turno=!turno;
b.setClickable(true);
contador++;
this.verificar_matriz();
}
//Funcion para verificar ganador del juego
public void verificar_matriz(){
int
contador_X_F=0,contador_O_F=0,contador_X_C=0,contador_O_C=0,

contador_X_DF=0,contador_O_DF=0,contador_X_DI=0,contador_O_DI=0,tam
anio=3;
Boolean ganador=false;
Boolean win_X=false;
Boolean win_O=false;
String v="";
for (int i=0;i<unaMatriz.length;i++){
for (int j=0;j<unaMatriz.length;j++){
//Encontrar las X en el juego
if (unaMatriz[i][j]==R.drawable.equis){
contador_X_F++;
if(contador_X_F==3){
v="GANO X FILA";
etiqueta.setText(v);
win_X=true;
break;
}
}
//Encontrar las O en el juego
if (unaMatriz[i][j]==R.drawable.cero){
contador_O_F++;
if(contador_O_F==3){
v="GANO O FILA";
etiqueta.setText(v);
win_O=true;
break;
}
}
//Encontrar las X por cada columna
ESPE Pgina 66
67

if(unaMatriz[j][i]==R.drawable.equis){
contador_X_C++;
if(contador_X_C==3){
v="GANO X COLUMNA";
etiqueta.setText(v);
ganador=true;
win_X=true;
break;
}
}

//Encontrar las O por cada columna


if(unaMatriz[j][i]==R.drawable.cero){
contador_O_C++;
if(contador_O_C==3){
v="GANO O COLUMNA";
etiqueta.setText(v);
ganador=true;
win_O=true;
break;
}
}
//Encontrar los valores en diagonal
if(i==j){
//Encontrar las X en el juego
if (unaMatriz[i][j]==R.drawable.equis){
contador_X_DF++;
if(contador_X_DF==3){
v="GANO X DIAGONAL FILA";
etiqueta.setText(v);
ganador=true;
win_X=true;
break;
}
}
//Encontrar las O en el juego
else if (unaMatriz[i][j]==R.drawable.cero){
contador_O_DF++;
if(contador_O_DF==3){
v="GANO O DIAGONAL FILA";
etiqueta.setText(v);
ganador=true;
win_O=true;
break;
}
}
}
if((i+j)==tamanio-1){
//Encontrar las X en el juego
if (unaMatriz[i][j]==R.drawable.equis){
contador_X_DI++;
if(contador_X_DI==3){
v="GANO X DIAGONAL COLUMNA";
etiqueta.setText(v);
ganador=true;
win_X=true;
break;
ESPE Pgina 67
68

}
}
//Encontrar las O en el juego
else if (unaMatriz[i][j]==R.drawable.cero){
contador_O_DI++;
if(contador_O_DI==3){
v="GANO O DIAGONAL COLUMNA";
etiqueta.setText(v);
ganador=true;
win_O=true;
break;
}
}
}

contador_X_F=0;contador_O_F=0;contador_X_C=0;contador_X_C=0;
}

if(win_X==true){
String v1="GANO X";
etiqueta.setText(v);
}
else if(win_O==true){
String v1="GANO O....";
etiqueta.setText(v);
}
else if(contador==9){
etiqueta.setText("Hay un empate");
init();
}
}
}

CAPTURAS DE PANTALLA

ESPE Pgina 68
69

ESPE Pgina 69
70

ESPE Pgina 70
71

ESPE Pgina 71
72

IV. Anlisis de resultados.


Aplicaciones J2ME

Aplicaciones Android
Aplicacin 1
La aplicacin se baso en una interfaz usando un LinearLayout, habilitada con un ScrollView
para poder visualizar todos los archivos en un mismo activity.
Se hizo un Splash Screen por lo cual este se va a iniciar primero y se tuvo que cambiar el
Manifest.xml para que se inicie primero, en este activity se configuro que se demore 4
segundos para que pase al siguiente activity.
Todas las imgenes que se utilizaron en el proyecto y los textos utilizados se encuentran
guardados en los resources.
Aplicacin 2
En esta aplicacin se utilizo un RelativeLayout, y se utilizo botones para al momento de
presionar y marcando si es una x o un circulo,
Todas las imgenes que se utilizaron en el proyecto y los textos utilizados se encuentran
guardados en los resources.

V. Conclusiones y recomendaciones
Cuando se quiere realizar una aplicacin mvil tenemos varias plataformas, por lo cual
debemos buscar la que se adapten a los requerimientos que el usuario busca y trata de
conseguir al desarrollar dicha aplicacin

VI. Referencias .
MSDN. (12 de 08 de 2016). Azure. Obtenido de Azure
OpenDb: https://msdn.microsoft.com/es-ec/default.aspx
Pozo, J. D. (09 de 09 de 2015). exabyteinformatica. Obtenido de
UOC: http://blog.abrahambarrera.me/
EcuRed. (12 de 05 de 2014). EcuRed Conocimiento con todos y para todos. Obtenido de
EcuRed Conocimiento con todos y para
todos: https://www.ecured.cu/Aplicaci%C3%B3n_web
MOSCARITOLO, A. (17 de 02 de 2017). Sistemas Operativos Mviles. Obtenido de El
99.6% del mercado mvil le pertenece a Android y iOS: http://latam.pcmag.com/sistemas-
operativos-moviles/18490/news/el-996-del-mercado-movil-le-pertenece-a-android-y-ios
Pozo, J. D. (12 de 09 de 2016). Entornos de programacin moviles. Obtenido de Entornos de
programacin
moviles: https://www.exabyteinformatica.com/uoc/Informatica/Tecnologia_y_desarrollo_e
n_dispositivos_moviles/Tecnologia_y_desarrollo_en_dispositivos_moviles_(Modulo_3).pd
f
Apache Foundation (2003). Apache HTTP Server Version 2.0 Documentation.
http://httpd.apache.org/docs-2.0/: Apache Foundation.

ESPE Pgina 72
73

EcuRed. (12 de 05 de 2014). EcuRed Conocimiento con todos y para todos. Obtenido de
EcuRed Conocimiento con todos y para todos:
https://www.ecured.cu/Aplicaci%C3%B3n_web
L., I. J. (25 de Marzo de 2010). Conocimiento y Sistemas. Obtenido de Caractersticas xml:
https://conocimientoysistemas.wordpress.com/tag/caracteristicas-xml/
Gonzalez, A. (2015). Tuprogramacion. Obtenido de Que es
Android? : http://www.tuprogramacion.com/glosario/que-es-android/
Plataformas de desarrollo iOS y Android - CICE. (2016). CICE. Retrieved 28 July 2017,
from http://cice.es/noticia/top-5-plataformas-desarrollo-ios-android/

ESPE Pgina 73

Você também pode gostar