proyecto de desarrollo para dispositivos móviles ciclo de ... · proyecto de desarrollo para...

7
Proyecto de desarrollo para dispositivos móviles Ciclo de vida de las actividades Cronómetro Ciclo de vida La clase Activity (AppCompatActivity) proporciona un conjunto de métodos que permiten a tu actividad saber cuándo el estado ha cambiado. Es decir, cuando el sistema está: Creando la actividad. Deteniendo la actividad. Pausando la actividad. Reanudando la actividad. Destruyendo la actividad.

Upload: others

Post on 06-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Proyecto de desarrollo para dispositivos móviles

Ciclo de vida de las actividades

Cronómetro

Ciclo de vida❖ La clase Activity

(AppCompatActivity) proporciona un conjunto de métodos que permiten a tu actividad saber cuándo el estado ha cambiado. Es decir, cuando el sistema está:❖ Creando la actividad.

❖ Deteniendo la actividad.❖ Pausando la actividad.❖ Reanudando la actividad.❖ Destruyendo la actividad.

Métodos del ciclo de vidaMétodo Cuándo es llamado

onCreate La actividad es creada. Crear/configurar las vistas. Recuperar el estado anterior.

onRestart La actividad estaba detenida y reinicia.

OnStart La actividad se hace visible. Entrará en primer plano y será interactiva.

OnResume La actividad está en primer plano.

OnPause La actividad no está en primer plano porque otra actividad está entrando. El código en este método deber ser rápido.

onStop La actividad ya no es visible.

onDestroy La actividad está a punto de ser destruida o está terminando su ejecución.

onSaveInstanceState Salvar las variables de instancia (estado).

Práctica❖ Escribe una aplicación que permita monitorear beacons.

Creando el proyecto❖ Crea un proyecto nuevo,

llámalo UtilizaBeacons.

❖ Selecciona un API mínimo de 19.

❖ Crea una Basic Activity.

❖ La actividad se llama BuscaBeacons.

GUI❖ Revisa el contenido de los archivos en res/layout.

Agrega el SDK de Estimote❖ Agrega está línea en el archivo gradle.build (Module: app)

implementation ‘com.estimote:sdk:1.4.8'

❖ Agrega el permiso en el archivo de Manifiesto.<uses-permission android:name=“android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

❖ A partir de la versión 23 del API, el permiso se debe pedir en tiempo de ejecución.override fun onResume() {

super.onResume()

SystemRequirementsChecker.checkWithDefaultDialogs(this) }

¿Cómo saber la versión de Android?

Registrando beacons❖ Declara las variables de instancia:

private var admBeacons: BeaconManager? = null private var region: BeaconRegion? = null

❖ Se crean en el método onCreate.admBeacons = BeaconManager(this); region = BeaconRegion("MisBeacons", UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"), null, null)

❖ Inicia/detiene el monitoreo.override fun onResume() { super.onResume()

SystemRequirementsChecker.checkWithDefaultDialogs(this) val adm = admBeacons admBeacons?.connect { adm?.startRanging(region) } }

override fun onStop() { admBeacons?.stopRanging(region) super.onPause() }

Detectando beacons❖ En el método onCreate, agrega:

admBeacons?.setRangingListener { beaconRegion: BeaconRegion?, beacons: MutableList<Beacon>? -> println(“detecta, ${beacons?.toString}“) }

❖ Corre la app y revisa la consola para ver los beacons detectados.

❖ Puedes definir el tiempo del scanner así:admBeacons?.setForegroundScanPeriod(1000, 3000)

❖ Agrega un ListView para mostrar los resultados.

Solución

❖ Agrega un ListView a la GUI.

❖ Declara una referencia al componente en la Actividad.id: listaDatosBeacons

❖ Declara un lista para poblar el componente.private var listaBeacons: ArrayList<String>? = null

Solución (cont.)

❖ Al detectar beacons, llena una lista con la información de major y minor, crea un adaptador con esa lista y asígnalo al ListView.if (beacons != null) { val iterador = beacons.iterator() for (beacon: Beacon? in iterador) { if (beacon!=null) { listaBeacons?.add("${beacon?.major}, ${beacon?.minor}") } } val arrDatos = listaBeacons?.clone() as ArrayList<String> val adaptador = ArrayAdapter<String>(baseContext, android.R.layout.simple_expandable_list_item_1, arrDatos) listaDatosBeacons.adapter = adaptador }

Monitoreando un Beacon específicoprivate void configurarBeacon() { admBeacons = new BeaconManager(this);

admBeacons.connect(new BeaconManager.ServiceReadyCallback() { @Override public void onServiceReady() { Log.i("Beacons", "onServiceReady()");

BeaconRegion region = new BeaconRegion("verde", UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"), 99999, 99999); admBeacons.startMonitoring(region); // Detener monitoreo en el método onPause() } });

admBeacons.setMonitoringListener(new BeaconManager.BeaconMonitoringListener() { @Override public void onEnteredRegion(BeaconRegion beaconRegion, List<Beacon> beacons) {

}

@Override public void onExitedRegion(BeaconRegion beaconRegion) {

} }); }

MinorMajor

Ejercicio en Equipo. 6 equipos.❖ Detectar la cercanía de UN beacon.

❖ Si el beacon se encuentra cerca, poner la pantalla en verde.

❖ Si el beacon sale de rango, poner la pantalla roja.

❖ Opcional. Crear una aplicación con tu equipo que utilice 2 o 3 beacons para resolver un problema real. Se considera como actividad extra, puede sustituir a una de menor calificación.