Anexo 3.- Manu al de usuario
4.2 Construcción de la aplicación
59
4.5 Aplicación “Museo de los Ferrocarrileros” 4.5.1 Vistas de la aplicación en ejecución
La aplicación está conformada por una vista principal, en donde se dará una cordial bienvenida (véase la figura 4.2) y un botón donde al presionarlo los mandará de inmediato a una segunda vista.
Figura 4.2. Vista principal de la aplicación
La segunda vista estará conformada por dos cuadros de texto en donde se imprimirá para este caso en particular el nombre completo del museo y en el segundo cuadro el nombre de la exposición. A continuación, se encuentran 3 botones los cuales serán para controlar el reproductor (play, pause y stop), por último una imagen que dice bienvenidos (véase figura 4.3.) la cual cambiará conforme el ID de las etiquetas NFC.
60
Figura 4.3. Vista secundaria de la aplicación
Conforme el ID de cada una de las etiquetas NFC, se cambiará la imagen, los letreros y el audio a reproducir respectivamente. A continuación, se muestra en las siguientes figuras las vistas para cada uno de los ID correspondientes a cada etiqueta.
61
Figura 4.5. Vista para la etiqueta con ID 2
62
Figura 4.7. Vista para la etiqueta con ID 4
63
4.6 Costos de elaboración del sistema de comunicación
En la realización del proyecto, se hace una inversión inicial de equipos y materiales, mismos que se enumeran a continuación:
1. Programas
Tabla 4.3 Costo de Programas
Programa Costo (Pesos Mexicanos MXN)
IDE eclipse Software libre
Acapela box Software libre
NFC App Curso Software libre
Camtasia Studio 4,729.11
Total 4,729.11
2. Equipos y Materiales
Tabla 4.4 Costo de equipo y materiales
Equipos y Materiales Costo (Peso Mexicano MXN)
Computadora (Laptop) 8,000
Dispositivo Móvil (Celular) 3,200
Etiquetas NFC paquete de 10 60
Papelería 700
Otros insumos 1,000
Total 12,960
3. Honorarios
Se toma en cuenta que un Ingeniero en computación cobra un estimado de $350 pesos la hora, si se considera que el proyecto se elaboró en un promedio de 1 año, se generaron gastos por concepto de proceso de análisis del trabajo, traslados, alimentación y un equipo de 3 integrantes, se obtiene:
64
Para el estudio de caso se realizaron trabajos de implementación para 5 obras de la exposición mismas que el tiempo de implementación fueron de 4 meses de programación, 8 meses de análisis (considere que el proyecto se inició desde cero) y que por los cuatro meses se tienen un total de $140 000 pesos + 40% de gastos de elaboración (análisis, desarrollo e implementación) suman en total $196 000 pesos.
Tabla 4.5. Costo Total
Gastos totales de elaboración del proyecto
Costo (Peso Mexicano MXN)
Programas 4,729.11
Materiales y Equipos 12,960
Honorarios 196,000
Total 213,689.11
Costo total del proyecto = $213,690 pesos.
4.6.1. Beneficios de la implementación del sistema de comunicación
El implementar el sistema de comunicación en un museo atrae bastantes beneficios a la hora de que se da a conocer la aplicación al público-usuario por las siguientes razones:
Ya que el usuario no le genera un costo por adquirirla.
Le da un plus al museo en vanguardia tecnológica.
Pretende atraer mayor cantidad de usuarios.
Si el museo desea usarlo como único medio de transmisión de información, ahorrará materiales de impresión de texto.
Cubrirá la problemática de transferencia de información para personas analfabetas y/o ciegas.
Evitar lo tedioso que es estar leyendo la información y a la vez ver la obra, le da más tiempo al visitante para poder disfrutar de la obra mientras al mismo tiempo escucha la descripción.
65
Conclusiones
66
Conclusiones
Se obtienen las siguientes conclusiones a partir de los resultados obtenidos tras el diseño y la implementación de la aplicación móvil.
Los museos necesitan de la integración de nuevas tecnologías en sus ambientes para lograr la interacción con los visitantes. Los nuevos contenidos atraerán mayor cantidad de visitas y modernizarán la forma en que las personas acceden a la información en los ambientes del museo.
La aplicación móvil permite acceder a la información de las piezas de arte en un museo. Su uso es sencillo e intuitivo en base a que solo tiene las vistas necesarias y logra brindar la información de la pieza de arte en corto tiempo.
Como se mencionó en este proyecto, esta nueva tecnología ya integrada en los dispositivos móviles ha llegado a invadir al ser humano, como usuario de la misma. Además, está tecnología que suma a los dispositivos que tienen mayores ventajas en diferentes contextos, ya que puede convivir perfectamente con tecnologías ya existentes, haciendo que los servicios que ya se ofrecen se puedan extender, facilitando así el día a día de los usuarios en sus actividades.
Se plantean algunas mejoras en el Sistema de Comunicación, las cuales se enumeran a continuación:
1.- Una base de datos externa que facilite la implementación de la aplicación en museos de gran tamaño.
2.- Ventana externa para visualizar la imagen de la obra en toda la pantalla del dispositivo móvil.
3.-Compatibilidad de la aplicación con otros Sistemas Operativos Móviles.
4.-Opcion para acceder al texto completo de la exposición si el museo así lo permite. 5.- Posibilidad de ver la aplicación en los idiomas más utilizados en el mundo.
67
Anexos
68
Anexo 1.- Código de la Aplicación
En este capítulo se detallará como está compuesta la aplicación y el código necesario para crearla especificando sus funciones y las partes que la conforman.
package com.software.museosnfc;
Código para vistas de la aplicación
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:orientation="vertical" android:background="@drawable/museo" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <TextView android:id="@+id/Bienvenidos" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="22dp" android:gravity="center" android:text="@string/hello_world"
Indica el nombre del proyecto.
En esta parte se implementa lo que es el nombre de la vista, las dimensiones, el margen y el fondo que en este caso es una imagen.
Se mandan llamar el String, el cual contienen alguna oración, en este caso es el de
la “Bienvenida” y se da
69 android:textColor="@color/negro" /> <TextView android:id="@+id/seguiente" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="185dp" android:layout_marginStart="50dp" android:layout_marginLeft="50dp" android:text="@string/siguiente" android:textColor="@color/verde" /> <Button android:id="@+id/enter" android:layout_width="174dp" android:layout_height="wrap_content" android:layout_marginBottom="74dp" android:gravity="center_horizontal" android:onClick="enter" android:padding="12dp" android:layout_marginTop="60dp" android:text="@string/enter" android:textColor="@color/blanco" /> </LinearLayout> </RelativeLayout>
Se mandan llamar el String
correspondiente a “Presione Enter para continuar” y se da
forma a la letra.
Se da formato al botón y se enlaza con la vista siguiente mediante el id enter, para entrar a la siguiente pantalla.
70
Esta es la vista principal
Segunda vista (Reproductor)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/segundav" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleHorizontal" RelativeLayout TextView android:id="@+id/Bienvenidos" TextView android:id="@+id/seguiente" Button
En esta parte se declara la segunda vista en donde contendrá el reproductor sus botones, visualizará las imágenes correspondientes a cada ID.
Se declara una línea de progreso la cual ira indicando el progreso que tenga cada audio al reproducirse.
71 android:layout_below="@+id/tv2contador" android:layout_marginTop="21dp" /> <ImageButton android:id="@+id/btnpause" android:layout_alignBottom="@+id/btnstop" android:onClick="pausa" android:src="@drawable/pausa" /> <TextView android:id="@+id/pieza" android:text="Medium Text" android:textAppearance= "?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/tv2contador" android:layout_marginTop="20dp" android:text="@string/id_tvinicioCancion" /> <ImageView android:id="@+id/IV_a_mostrar" android:scaleType="matrix" android:layout_below="@+id/btnpause" android:src="@drawable/diegorivera" /> </RelativeLayout>
Se declara un botón con ID pausa y la función android:onClick="pausa" para al presionar el botón mande llamar una determinada función llamada pausa. Se enlaza con las funciones de los otros dos botones para que efectué las acciones de reproductor. Este proceso se hace igual la declaración para los botones de stop y play.
Se declara el cuadro donde se imprimirá el nombre de la exposición. Es parecida la declaración para el nombre del autor o museo en este caso solo se varea el ID.
Se declara un cuadro que mostrara un contador indicando el minuto y segundo en el que va el audio al reproducirse. Se declara el espacio donde se imprimirán las imágenes al mandarlas llamar por el ID de la etiqueta NFC. Por el momento imprimirá una imagen de bienvenida hasta el momento que se pase por una etiqueta NFC.
72 Código para cambio de vista.
Intent vistanueva = new Intent(MainActivity.this,vistareproductor.class); startActivity(vistanueva);
Código para almacenar datos
datosAguardar.setId(0);
datosAguardar.setNombre("Museo de los Ferrocarrileros");
datosAguardar.setPieza("Bienvenido datosAguardar.setAudio("audio1.mp3"); datosAguardar.setImagen("termino");
datosAguardar.setTexto("Pintura de hace muchos años"); miBaseDeDatos.insertExposicion(datosAguardar);
Impresión de datos <EditText android:id="@+id/pieza" Contador del reproductor <TextView android:id="@+id/tv2contador" Progreso del audio <ProgressBar> Botones del reproductor <ImageButton>
Espacio para visualizar de las imágenes
Se registran los datos que se mandaran llamar. Se repite el proceso para almacenar para cada ID. Almacena en la base de datos. Se manda llamar la segunda vista
73
public class DatosBD { private String nombre; private String pieza; private String imagen; private String audio; private String texto; private long id;
private static final String CREATE_STATEMENT = "CREATE TABLE "+ TABLENAME + " ("+ COLUMN_ID + " INTEGER PRIMARY KEY,"+ COLUMN_NOMBRE+ " TEXT, "+
COLUMN_PIEZA+ " TEXT, "+ COLUMN_IMAGEN+ " TEXT, "+ COLUMN_AUDIO+ " TEXT, "+ COLUMN_TEXTO+ " TEXT)";
public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_STATEMENT); } ContentValues values = new ContentValues(); values.put(COLUMN_ID, exposicion.getId()); values.put(COLUMN_NOMBRE, exposicion.getNombre()); values.put(COLUMN_PIEZA, exposicion.getPieza()); values.put(COLUMN_IMAGEN, exposicion.getImagen()); values.put(COLUMN_AUDIO, exposicion.getAudio()); values.put(COLUMN_TEXTO, exposicion.getTexto()); SQLiteDatabase db = getReadableDatabase();Cursor c;
c = db.rawQuery("SELECT * FROM "+TABLENAME, null);
Se crea una clase la cual almacenará cada uno de los datos para mandarlos llamar.
Se crea la tabla contact en donde almacenará ID INTEGER PRIMARY KEY, age INTEGER, name TEXT.
Se crean los datos y se almacenan en las tablas para mandarlos llamar
Mediante Contentvalues se interactúa con los datos.
Se asignan valores a las columnas de las tablas.
Creamos un cursor y realizamos la llave primaria.
74
public DatosBD getById(long id) {
SQLiteDatabase db = getReadableDatabase(); Cursor c;
c = db.rawQuery("SELECT * FROM "+TABLENAME+" WHERE
"+COLUMN_ID+"="+id, null);
Código para NFC
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (mNfcAdapter == null) {
Toast.makeText(this, "Este dispositivo no
soporta NFC", Toast.LENGTH_LONG).show();finish(); return;}
if (!mNfcAdapter.isEnabled()){mTextView.setText(""); mTextView.setText("NFC desactivado");
AlertDialog.Builder dialogo = new AlertDialog.Builder(this);
dialogo.setTitle("NFC está desactivado!!"); dialogo.setMessage("Es necesario activar el módulo NFC para que la aplicación funcione, si ya lo activaste presiona" +" actualizar.\n\n" + public void onClick(DialogInterface dialog,
int which){startNfcSettingsActivity(); recreate();}}) else {mTextView.setText("NFC activado");}
Obtenemos la base de datos y creamos un cursor para que interactúe con la llave primaria
Realizamos la siguiente asignación para obtener el adaptador predeterminado de NFC para el dispositivo donde se encuentra instalada la aplicación.
Se verifica si el dispositivo donde se instaló la aplicación cuenta con NFC, si si continua, de lo contrario manda un mensaje avisando que no lo soporta y se sale de la aplicación
Verifica si el NFC se encuentra activado, si no manda un cuadro de dialogo para activarlo. Manda ajustes si la SDK es mayor de 16 si no rebobina la función activity. Si se encuentra activado manda un mensaje avisando que lo está.
75
protected void startNfcSettingsActivity() {
if (android.os.Build.VERSION.SDK_INT >= 16) { startActivity(new Intent(android.provider. Settings.ACTION_NFC_SETTINGS)); } else { startActivity(new Intent(android.provider. Settings.ACTION_WIRELESS_SETTINGS));}} if(NfcAdapter.ACTION_TAG_DISCOVERED.equals ( intent.getAction() )) {mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); Toast.makeText(this, "Detectado!!", Toast.LENGTH_SHORT).show();
Parcelable[] rawMsgs = intent.getParcelableArrayExtra( NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage msg = (NdefMessage) rawMsgs[0]; NdefRecord record = msg.getRecords()[0];
String payload = new String(record.getPayload()); String cortado=payload.substring(3);
cajaTag.setText(cortado);
protected void onPostExecute(String result) {if (result != null)
{cajaTag.setText("Contenido Leido: " + result);}}
int id = Integer.parseInt(cortado); TablaDatos cm = new TablaDatos(this); exposicion = cm.getById(id);
switch(id)
{case 1:
Se comprueba la versión de Android para activar el NFC.
La función NfcAdapter se encuentra en modo lectura y obtiene el contenido de la etiqueta NFC.
El contenido de la etiqueta NFC lo convierte a texto y recorta la parte de codificación. Con la parte recortada se hace la búsqueda en la base de datos. Mediante esta función se lee las etiquetas NFC.
76
imagenAinsertar.setImageResource(R.drawable.ferrocarriluno); mp = MediaPlayer.create(this, R.raw.audio1);
Toast.makeText(this, "Audio Cargado", Toast.LENGTH_LONG).show(); handler = new Handler();
miPB = (ProgressBar)findViewById(R.id.progressBar1); miPB.setMax(mp.getDuration());
break;
Codigo para reproductor
if(mp==null){ switch(MonitorDeId){ case 1: mp = MediaPlayer.create(this, R.raw.audio1); break; mp.start(); miPB.setMax(mp.getDuration()); while(progressStatus < mp.getDuration()) {progressStatus = mp.getCurrentPosition(); if(mp==null){ mp = MediaPlayer.create(this, R.raw.musicaapp);} mp.start(); miPB.setProgress(progressStatus); segundos = progressStatus/1000; if(segundos==60) { minutos=+1;}
else if(segundos>=60){ segundos=segundos-60;}
Las rutas de los datos se meten a un switch para mandar llamar solo la información requerida por la etiquetas NFC. Manda llamar solo el audio especificado.
Va ir indicando el progreso del audio en la barra de la pantalla Saca la duración del audio que se va a reproducir.
Si no hay audio reproduciéndose y presionan el botón play comienza a reproducir.
Indica cuánto tiempo lleva iniciado el audio.
77
String cuenta = "0"+minutos+":"+segundos; TextView cp = (TextView)findViewById (R.id.tv2contador);
cp.setText(cuenta);
public void stop(View view){ if(mp!=null){
Toast.makeText(this, "stop", Toast.LENGTH_SHORT).show(); progressStatus=0;//borrar
miPB.setProgress(0);//borrar mp.stop();
mp = MediaPlayer.create(this, R.raw.musicaapp);} if(mp!=null && mp.isPlaying())
{mp.pause();
Toast.makeText(this, "pausa", Toast.LENGTH_SHORT).show();} else{
mp.start();
Toast.makeText(this, "play", Toast.LENGTH_SHORT).show();}
Al presionar el botón de stop verifica que el audio no esté en 0, si no lo está regresa el progreso a 0 y el estado del audio igual a 0.
Detiene el progreso del audio y la reproducción
78
Para grabar las etiquetas NFC utilizaremos otra aplicación similar a la anterior con la diferencia que solo tendrá el código de NFC de la anterior.
<RelativeLayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:background="@drawable/museo" > <Button android:id="@+id/btnGrabar" android:layout_marginBottom="120dp" android:onClick="grabarTag" android:text="@string/id_btnGrabar" /> <TextView android:id="@+id/tvNFC" android:layout_above="@+id/etContenidoTag" android:text="@string/id_ActivarNfc" android:textColor="@color/verde" /> <EditText android:id="@+id/etContenidoTag" android:hint="@string/id_ContenidoTag" > </RelativeLayout> Parámetros de margen de la vista para grabar las etiquetas NFC, contiene el fondo.
Contiene el formato y la función onClick para que cuando sea tocado realice la función que se le asigne
Se visualiza un texto que indica si el NFC se encuentra activado o desactivado
Es un cuadro para ingresar el texto deseado en las etiquetas NFC
79
cajaTag = (EditText)findViewById(R.id.etContenidoTag);
botonGrabar = (Button)findViewById(R.id.btnGrabar);
mTextView = (TextView) findViewById(R.id.tvNFC);
Utilizamos todo el código anterior de NFC de la aplicación anterior pero además agregamos una nueva funcion para grabar Etiqueta NFC
public void grabarTag(View view) { try{ if(mytag == null) {Toast.makeText(context, context. getString(R.string.error_notag), Toast.LENGTH_SHORT).show();
Texto que indica el estado del NFC Cuadro para ingresar texto
Botón para grabar etiqueta NFC
Declaro los componentes de mi vista principal
Si no existe etiqueta NFC para escribir muestra un mensaje indicándolo.
80
NdefFormatable ndeff = NdefFormatable.get(tag); try{progreso2();
ndeff.connect();
ndeff.format(message);
Toast.makeText(this, "Dando formato a tag...", Toast.LENGTH_LONG).show();
ndeff.close(); pDialog.dismiss();
Toast.makeText(this, "Finalizo proceso con exito!!", Toast.LENGTH_LONG).show();}
String lang = "us";//en
byte[] textBytes = text.getBytes();
byte[] langBytes = lang.getBytes("US-ASCII"); int langLength = langBytes.length;
byte[] payload = new byte[1 + langLength + textLength];
payload[0] = (byte) langLength; System.arraycopy(langBytes, 0, payload, 1, langLength);
System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);
NdefRecord recordNFC = new NdefRecord(NdefRecord.
TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payload);
return recordNFC;
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
new NdefReaderTask().execute(tag);
TextView tv2 = (TextView) findViewById(R.id.tvNFC);
Se le da formato a la etiqueta NFC y cuando acaba manda un aviso.
Guarda el mensaje que se grabará en la etiqueta NFC. Graba la etiqueta NFC con el contenido que deseamos. Muestra el estado del NFC
81
Anexo 2.- Requerimientos de la aplicación “Museo de los Ferrocarrileros”
En esta fase lo que se hará es explicar con un poco de detalle los pasos a seguir para hacer un adecuado uso de la aplicación facilitando al usuario su recorrido del museo, sin que tenga que leer toda la información recabada en este proyecto enfocándose solo al uso.
Como primer paso para hacer uso de esta aplicación es contar con un dispositivo móvil que contenga NFC.
Requerimientos del entorno de capacitación para los encargados de implementar el sistema.
Proyector.
Computadora con acceso a red.
Etiquetas NFC.
Celular con Sistema Operativo Android.
Aplicación NFC en el celular.
Personal que interactuara con la implementación y/o mantenimiento del sistema.
Papel y lápiz para los participantes.
Espacio acondicionado para la exposición.
Copia del manual para cada uno de los participantes.
Requisitos mínimos del dispositivo móvil para implementar la aplicación:
Android 4.4.2.
Espacio suficiente para instalar la aplicación.
82
Anexo 3.- Manual de Usuario
Procedimiento para la ejecución del Sistema de Comunicación con Equipos Móviles para Museos
1. El equipo móvil debe contar con el sistema de comunicación móvil NFC.
2. Las etiquetas NFC deben estar cargadas previamente con la información correspondiente a cada una de las piezas que cuente con el sistema.
3. Se sugiere poner las etiquetas NFC cerca de la pieza para hacer entendible que información es la que contiene.
4. Para que pueda transferirse la información de la etiquetas NFC hacia el teléfono, debe estar activado el NFC en el teléfono.
5. Acerque el equipo móvil a la etiquetas NFC, que exista un pequeño contacto entre ambos hasta que cambie la pantalla de inicio de la aplicación.
6. Para reproducir el audio de click en el símbolo de Play
7. Para pausar el audio de click en el símbolo Pause
8. Para detener el audio de click en el símbolo Stop
83
Bibliografía
[1] Visitemos México “Museos”, http://www.visitmexico.com/es/museos-en-mexico, Fecha de consulta: 20/09/14.
[2] INAH, “Red de Museos del INAH”, http://www.inah.gob.mx/museos, Fecha de consulta:20/09/14
[3] CONACULTA, “Encuesta Nacional”, http://www.conaculta.gob.mx/encuesta_nacional/, Fecha de consulta:20/09/14.
[4] Martin Patricia, “La importancia de visitar museos”,
http://www.elfinanciero.com.mx/opinion/la-importancia-de-visitar-museos.html, Fecha de consulta: 09/01/15
[5] idcnoticias, “En 2015 el 70% de celulares serán inteligentes”,
http://www.idconline.com.mx/juridico/2013/06/18/en-2015-el-70-de-celulares-seran- inteligentes, Fecha de consulta: 10/01/15
[6] El universal, “Smartphone, promotores de la tecnología NFC”,
http://www.eluniversal.com.mx/computacion-tecno/2013/nfc-smartphones-aumentan- 79449.html, Fecha de consulta: 10/01/15
[7] Campodocs, “ Near Field Communication“, http://campodocs.com/articulos- enciclopedicos/article_92483.html, Fecha de consulta:10/01/15
[8] HTK-RFID, “NFC un nuevo estilo de vida”, Tecnologia RFID, (http://www.htk- rfid.com/blog/2013/03/nfc-un-nuevo-estilo-de-vida/), Fecha de consulta:05/09/14
[9] Chavarría Chavarría Daniel, ”Tecnología de Comunicación de Campo Cercano (NFC) y sus Aplicaciones ”, Escuela de Ingeniería Eléctrica de la Facultad de Ingeniería de la