SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Bootcamp: Desarrollo
en Android
Medellín, Febrero 2015
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Agenda
TEMA SESIÓN TEMA SESIÓN
Historia 1 Geolocalización 2
Workflow 1 IDE/Debug 3
“Hello World” 1 Fragmentos 3
Ciclo de vida 1 Interfaces 3
Action Bar 1 Notificaciones 4
XML Layouts 1 Consumo APIs 4
Menús 2 GCM 4
Persistencia 2 Q&A 1-4
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Historia: Android como OS
• Android Inc. (2005 Google)
• +1MM diarios
• Open source
• C | C++ | Java
• Construido y compilado sobre
Linux (apps como usuarios)
• DB relacional (SQLite)
• OpenGL (v2.0, v3.0)
• Mercado móvil 2007 (iPhone)
• C2DM (Push)
• WebKit (Chromium)
• GPS, acelerómetro,
giroscopio, proximidad, luz.
• Emulador sobre Eclipse*
• Multitarea real desde GB
*Genymotion!
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Historia: Versiones
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Historia: Versiones
POSTRES
Apple Pie Gingerbread
Banana Bread Honeycomb
Cupcake Ice Cream Sandwich
Donut Jelly Bean
Eclair Kit Kat
Froyo Lollipop
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Historia: Versiones
NOMBRE VERSIÓN API NOMBRE VERSIÓN API
Apple Pie 1 Gingerbread 9-10
Banana Bread 2 Honeycomb 11-13
Cupcake 3 Ice Cream Sandwich 14-15
Donut 4 Jelly Bean 16-18
Eclair 5-7 Kit Kat 19-20*
Froyo 8 Lollipop 21
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Workflow: DDD
• IDE
• Dispositivos/Emuladores
• Test App
• Code!!!
• Desplegar
• Depuración
• Firmar, test a producción
• Alfa, beta (privadas, públicas)
• Publicar, promocionar.
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Workflow: Soporte
Versiones
!
!
!
!
!
!
!
!
Densidades y tamaños de pantalla
Versión de OpenGL
Dashboard 12-2014
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Workflow: Soporte
Versiones
!
!
!
!
!
!
!
!
Densidades y tamaños de pantalla
Versión de OpenGL
Dashboard 02-2015
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Workflow: Requisitos
• Android Studio (Beta estable)
• Eclipse con ADT oficial (opcional)
• Acceso a la documentación y referencia
(developer.android.com)
• Equipo Android de Depuración (opcional)
• Windows OEM Driver
• Linux “/etc/udev/rules.d/51-android.rules” file
• MacOSX :)
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
“Hola Mundo”
• Componentes de un proyecto
• Actividades
• Recursos
• Manifiesto
• Layouts
• Strings
• Toast
• Intent
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Ciclo de vida
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Action Bar
• Versión de soporte?
AppCompat
• Menús
• Iconos como acciones
• Estilos
• Recursos
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Action Bar
• Versión de soporte?
AppCompat
• Menús
• Iconos como acciones
• Estilos
• Recursos
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Layouts: Vistas
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Layouts: Organizaciones
Comunes
• Linear
• Relative
• WebView
• ListView
• GridView
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Layouts: Pesos
• Linear Layout
• No hay medidas
estáicas
• Orientaciones y pesos
• ¿Organización?
Table 1
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Agenda
TEMA SESIÓN TEMA SESIÓN
Historia 1 Geolocalización 2
Workflow 1 IDE/Debug 3
“Hello World” 1 Fragmentos 3
Ciclo de vida 1 Interfaces 3
Action Bar 1 Notificaciones 4
XML Layouts 1 Consumo APIs 4
Menús 2 GCM 4
Persistencia 2 Q&A 1-4
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Menús
• Opciones (Acciones) del
ActionBar
• Menús contextuales de acción
• Menú tipo “pop-up”
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Menús Contextuales
• Fragmentos de listas
• Envío de información entre
fragmentos
• Adaptadores personalizados
• Control de eventos de items
• Menús contextuales por ítem
• Actualización de listas
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia
• Preferencias compartidas
• SQLite
• Archivos
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: SQLite
• Paquete contenedor:
android.database.sqlite
• Clase contrato
• Constantes de nombres de tablas, vistas,
columnas, tipos de datos
• Con un contrato se puede replicar las
tablas, consultas y ejecuciones en todo el
código
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: SQLite
public	
  class	
  DatabaseContract	
  {	
  
	
  	
  	
  	
  //Tabla	
  Usuarios	
  
	
  	
  	
  	
  public	
  static	
  class	
  Users	
  implements	
  BaseColumns{	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  static	
  final	
  String	
  TABLE_NAME	
  =	
  "users";	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  static	
  final	
  String	
  COLUMN_NAME_NAME	
  =	
  "name";	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  static	
  final	
  String	
  COLUMN_NAME_DRINK	
  =	
  "drink";	
  
	
  	
  	
  	
  	
  	
  	
  	
  public	
  static	
  final	
  String	
  COLUMN_NAME_SPORT	
  =	
  "sport";	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  //	
  Otras	
  tablas,	
  vistas...	
  
}
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: SQLite
public	
  class	
  Ayudante	
  extends	
  SQLiteOpenHelper	
  {	
  
!
	
  	
  	
  	
  public	
  static	
  final	
  String	
  DATABASE_NAME	
  =	
  "nombrebase.db";	
  
	
  	
  	
  	
  public	
  static	
  final	
  int	
  DATABASE_VERSION	
  =	
  1;	
  
	
  	
  	
  	
  public	
  static	
  final	
  String	
  SQL_CREATE_USERS	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  "CREATE	
  TABLE	
  "	
  +	
  Users.TABLE_NAME	
  
	
   	
   	
   +	
  "	
  ("+	
  Users._ID	
  +	
  "	
  INTEGER	
  PRIMARY	
  KEY,	
  "	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  Users.COLUMN_NAME_NAME	
  +	
  "	
  TEXT,	
  "	
  
	
   	
   	
   +	
  Users.COLUMN_NAME_DRINK	
  +	
  "	
  TEXT,	
  "	
  
	
  	
  	
  	
  	
  	
  	
  	
  +	
  Users.COLUMN_NAME_SPORT	
  +	
  "	
  TEXT)";	
  
	
  	
  	
  	
  public	
  static	
  final	
  String	
  SQL_DELETE_USERS	
  =	
  
	
   	
   	
   "DROP	
  TABLE	
  IF	
  EXISTS	
  "	
  +	
  Users.TABLE_NAME;	
  
!
	
  	
  	
  	
  //	
  Otras	
  Sentencias	
  ...	
  
	
  	
  	
  	
  //	
  Las	
  bases	
  de	
  datos,	
  una	
  para	
  leer,	
  una	
  para	
  escribir	
  datos	
  
	
  	
  	
  	
  SQLiteDatabase	
  escritor;	
  
	
  	
  	
  	
  SQLiteDatabase	
  lector;	
  
	
  	
  	
  	
  public	
  Ayudante(Context	
  context){	
  
	
  	
  	
  	
  	
  	
  	
  	
  super(context,	
  DATABASE_NAME,	
  null,	
  DATABASE_VERSION);	
  
	
  	
  	
  	
  }	
  
}
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: SQLite
public	
  boolean	
  insertarUsuario(Usuario	
  nuevo)	
  {	
  
	
  	
  	
  	
  ContentValues	
  values	
  =	
  new	
  ContentValues();	
  
!
	
  	
  	
  	
  values.put(Users.COLUMN_NAME_NAME,	
  nuevo.name);	
  
	
  	
  	
  	
  values.put(Users.COLUMN_NAME_DRINK,	
  nuevo.drink);	
  
	
  	
  	
  	
  values.put(Users.COLUMN_NAME_SPORT,	
  nuevo.sport);	
  
!
	
  	
  	
  	
  long	
  inserted	
  =	
  escritor.insert(	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Users.TABLE_NAME,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Users.COLUMN_NAME_NAME,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  values);	
  
!
	
  	
  	
  	
  if(inserted	
  ==	
  -­‐1)	
  return	
  false;	
  
	
  	
  	
  	
  return	
  true;	
  
}
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: SQLite
public	
  List<Usuario>	
  consultarUsuarios(){	
  
!
	
  	
  	
  	
  String[]	
  columns	
  =	
  {Users._ID,	
  Users.COLUMN_NAME_NAME,	
  
	
  	
  	
  	
  	
  	
  	
  	
  Users.COLUMN_NAME_DRINK,	
  Users.COLUMN_NAME_SPORT};	
  
!
	
  	
  	
  	
  String	
  selection	
  =	
  null;	
  //Users.COLUMN_NAME_NAME	
  +	
  "	
  like	
  ?";	
  
	
  	
  	
  	
  String	
  selectionArgs[]	
  =	
  null;	
  //{"%a%"};	
  
	
  	
  	
  	
  String	
  groupBy	
  =	
  null;	
  //Users.COLUMN_NAME_SPORT;	
  
	
  	
  	
  	
  String	
  having	
  =	
  null;	
  //condición	
  aritmética	
  
	
  	
  	
  	
  String	
  orderBy	
  =	
  null;	
  //Users._ID;	
  
	
  	
  	
  	
  String	
  limit	
  =	
  null;	
  //"10";	
  
!
	
  	
  	
  	
  Cursor	
  results	
  =	
  lector.query(Users.TABLE_NAME,	
  	
  columns,	
  
	
  	
  	
  	
  	
  	
  	
  	
  selection,	
  selectionArgs,	
  groupBy,	
  	
  having,	
  	
  orderBy,	
  limit);	
  
	
  	
  	
  	
  //	
  results	
  ya	
  es	
  un	
  cursor	
  con	
  los	
  datos	
  de	
  regreso	
  
}
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia:
Archivos
• Los directorios son de tipo File, así no sean archivos
• Opción correcta para imágenes, o elementos que puedan ser
compartidos por red, incluso para borradores de correos, o
borradores de configuraciones que puedan ser guardados para
beneficio del usuario y evitar complicarlo con llenar de nuevo muchos
datos.
<uses-­‐permission	
  
android:name="android.permission.WRITE_EXTERNAL_STORAGE"	
  />	
  
<uses-­‐permission	
  
android:name="android.permission.READ_EXTERNAL_STORAGE"	
  />
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: Archivos
Interna
• Siempre está disponible, por defecto. Cambiar con
android:installLocation
• Por defecto accede solo el app
• Cuando el usuario des-instala el app, se eliminan los archivos
• Es la mejor opción cuando queremos que ni el usuario u otras apps
puedan acceder a los datos
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: Archivos
Externa
• No siempre está disponible
• No tiene recursos, es WORLD_READABLE
• Solo se eliminan los archivos al des-instalar, cuando se guardan en
getExternalDir()
• Es lo mejor cuando son archivos que queremos que se compartan
con otras apps (¿fotos?)
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: Preferencias
compartidas
• Valores en mapa
• ruta-app/diccionario recuperado cada
apertura
• getSharedPreferences() Vs
getPreferences()
• MODE_WORLD_READABLE,
MODE_WORLD_WRITEABLE,
MODE_PRIVATE
• Editor: getEditor(), put…(), commit()
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Persistencia: Preferencias
compartidas
• Ejercicio tres tipos de variables
• String
• int
• boolean
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Geolocalización
• Fragmentos
• Conexión con la cuenta de
desarrollado
• Firma SHA1
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Geolocalización
• Manifiesto con permisos de acceso
a sensores.
• Google Play Services
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Geolocalización
<uses-­‐permission	
  
android:name="android.permission.INTERNET"/>	
  
<uses-­‐permission	
  
android:name="android.permission.ACCESS_NETWORK_STATE"/>	
  
<uses-­‐permission	
  
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>	
  
<uses-­‐permission	
  
android:name=	
  
"com.google.android.providers.gsf.permission.READ_GSERVICES"/>	
  
!
<!-­‐-­‐	
  The	
  following	
  two	
  permissions	
  are	
  not	
  required	
  to	
  use	
  
Google	
  Maps	
  Android	
  API	
  v2,	
  but	
  are	
  recommended.	
  -­‐-­‐>	
  
<uses-­‐permission	
  
android:name="android.permission.ACCESS_COARSE_LOCATION"/>	
  
<uses-­‐permission	
  
android:name="android.permission.ACCESS_FINE_LOCATION"/>
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Geolocalización: Java
import	
  com.google.android.gms.maps.MapFragment;	
  
/*…*/	
  
!
MapFragment	
  elMapaQueVamosAInyectar	
  =	
  new	
  MapFragment();	
  
!
FragmentManager	
  fm	
  =	
  getActivity().getFragmentManager();	
  
!
fm.beginTransaction().add(	
  
	
   R.id.contenedor_mapa	
  +	
  mapaId,	
  
	
   elMapaQueVamosAInyectar,	
  
	
   “mapa")	
  
.commit();
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Geolocalización: XML
<fragment	
  	
  
android:id="@+id/map"	
  	
  
android:layout_width="match_parent"	
  	
  
android:layout_height="match_parent"	
  	
  
class="com.google.android.gms.maps.MapFragment"	
  />	
  
	
  	
  
<FrameLayout	
  android:id="@+id/contenedor_mapa"	
  
android:layout_width="match_parent"	
  
android:layout_height=“match_parent"></FrameLayout>
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Agenda
TEMA SESIÓN TEMA SESIÓN
Historia 1 Geolocalización 2
Workflow 1 IDE/Debug 3
“Hello World” 1 Fragmentos 3
Ciclo de vida 1 Interfaces 3
Action Bar 1 Notificaciones 4
XML Layouts 1 Consumo APIs 4
Menús 2 GCM 4
Persistencia 2 Q&A 1-4
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Debug
Escoger punto(s) de interrupción y ejecutar el APK con el insecto.
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Debug
Llegar al punto de interrupción en el teléfono (ó emulador).
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Debug
Inspeccionar de ser necesario, continuar.
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Fragmentos
• Nuevo estándar
• Re-utilización de código
• Ciclo de vida propio
• Transacciones
• Diseño multi-screen
• Teléfonos
• Tabletas
• Wear
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Fragmentos:
Ciclo de vida
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Fragmentos: Interfaces
• Manera segura de compartir
información.
• getActivity() funciona desde
un fragmento para acceder a
otro, pero no de manera
segura.
• La interfaz exige
comunicación y favorece
trabajo colaborativo.
• Estándar de métodos de
comunicación.
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Agenda
TEMA SESIÓN TEMA SESIÓN
Historia 1 Geolocalización 2
Workflow 1 IDE/Debug 3
“Hello World” 1 Fragmentos 3
Ciclo de vida 1 Interfaces 3
Action Bar 1 Notificaciones 4
XML Layouts 1 Consumo APIs 4
Menús 2 GCM 4
Persistencia 2 Q&A 1-4
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
Notificaciones
Componentes Obligatorios:
!
• smallIcon
• title
• detailedText
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
GCM: Google Cloud
Messaging
https://developer.android.com/google/gcm/index.html
#cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio
GCM: Google Cloud
Messaging
• SENDER_ID (API
Console)
• Verificar
SharedPreferences
• registerInBackground
• Pedir un regId
(registration ID) del
server GCM
• Alojar el ID en la DB
propia
• Alojar el ID en
SharedPreferences
!
• BroadcastReceiver
escuchando push
• IntentService que
notifica

Más contenido relacionado

Similar a Cappacitate Android Medellín

Desarrollo de módulos para Drupal
Desarrollo de módulos para DrupalDesarrollo de módulos para Drupal
Desarrollo de módulos para DrupalAlessandro Mascherpa
 
An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup Arkhotech
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"Alberto Ruibal
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxLuis Fernando Aguas Bucheli
 
Herramientas y complementos al desarrollar con tecnologías Microsoft
Herramientas y complementos al desarrollar con tecnologías MicrosoftHerramientas y complementos al desarrollar con tecnologías Microsoft
Herramientas y complementos al desarrollar con tecnologías MicrosoftMiguel Teheran
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Luis Fernando Aguas Bucheli
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidAlberto Ruibal
 
Esri Open Platform
Esri Open PlatformEsri Open Platform
Esri Open PlatformEsri España
 
Cómo construir tu propia data platform. From zero to hero.
Cómo construir tu propia data platform. From zero to hero. Cómo construir tu propia data platform. From zero to hero.
Cómo construir tu propia data platform. From zero to hero. GustavoMartin46
 
Presentacion Karting Ucoc
Presentacion Karting UcocPresentacion Karting Ucoc
Presentacion Karting Ucocvladiolivella
 
Seminario html5
Seminario html5Seminario html5
Seminario html5UDECI
 

Similar a Cappacitate Android Medellín (20)

RAML
RAMLRAML
RAML
 
Android basics v3
Android basics v3Android basics v3
Android basics v3
 
Desarrollo de módulos para Drupal
Desarrollo de módulos para DrupalDesarrollo de módulos para Drupal
Desarrollo de módulos para Drupal
 
An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
DAM-S7.pptx
DAM-S7.pptxDAM-S7.pptx
DAM-S7.pptx
 
Todomir
TodomirTodomir
Todomir
 
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptxEFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
EFC-Programación .net-Luis Fernando Aguas - 15012022 1500.pptx
 
Herramientas y complementos al desarrollar con tecnologías Microsoft
Herramientas y complementos al desarrollar con tecnologías MicrosoftHerramientas y complementos al desarrollar con tecnologías Microsoft
Herramientas y complementos al desarrollar con tecnologías Microsoft
 
Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700Efc programación .net-luis fernando aguas - 22012022 1700
Efc programación .net-luis fernando aguas - 22012022 1700
 
MLOps.pptx
MLOps.pptxMLOps.pptx
MLOps.pptx
 
DSpace Workshop
DSpace Workshop DSpace Workshop
DSpace Workshop
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
Esri Open Platform
Esri Open PlatformEsri Open Platform
Esri Open Platform
 
Cómo construir tu propia data platform. From zero to hero.
Cómo construir tu propia data platform. From zero to hero. Cómo construir tu propia data platform. From zero to hero.
Cómo construir tu propia data platform. From zero to hero.
 
Presentacion Karting Ucoc
Presentacion Karting UcocPresentacion Karting Ucoc
Presentacion Karting Ucoc
 
Seminario html5
Seminario html5Seminario html5
Seminario html5
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Curso Cloud Computing, Parte 2: Google App Engine
Curso Cloud Computing, Parte 2: Google App EngineCurso Cloud Computing, Parte 2: Google App Engine
Curso Cloud Computing, Parte 2: Google App Engine
 

Más de Julián R. Figueroa

Más de Julián R. Figueroa (6)

Ruby twitter bot
Ruby twitter botRuby twitter bot
Ruby twitter bot
 
Conversatic - Fusagasugá
Conversatic - FusagasugáConversatic - Fusagasugá
Conversatic - Fusagasugá
 
Presentacion Digital Bank Aval
Presentacion Digital Bank AvalPresentacion Digital Bank Aval
Presentacion Digital Bank Aval
 
BarCamp Scrum Col30-2015
BarCamp Scrum Col30-2015BarCamp Scrum Col30-2015
BarCamp Scrum Col30-2015
 
La Incursión de las Pymes en la Era Digital
La Incursión de las Pymes en la Era DigitalLa Incursión de las Pymes en la Era Digital
La Incursión de las Pymes en la Era Digital
 
Scrum UMNG - Herramientas de Emprendimiento
Scrum UMNG - Herramientas de EmprendimientoScrum UMNG - Herramientas de Emprendimiento
Scrum UMNG - Herramientas de Emprendimiento
 

Último

El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 

Último (20)

El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 

Cappacitate Android Medellín

  • 1. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Bootcamp: Desarrollo en Android Medellín, Febrero 2015
  • 2. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Agenda TEMA SESIÓN TEMA SESIÓN Historia 1 Geolocalización 2 Workflow 1 IDE/Debug 3 “Hello World” 1 Fragmentos 3 Ciclo de vida 1 Interfaces 3 Action Bar 1 Notificaciones 4 XML Layouts 1 Consumo APIs 4 Menús 2 GCM 4 Persistencia 2 Q&A 1-4
  • 3. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Historia: Android como OS • Android Inc. (2005 Google) • +1MM diarios • Open source • C | C++ | Java • Construido y compilado sobre Linux (apps como usuarios) • DB relacional (SQLite) • OpenGL (v2.0, v3.0) • Mercado móvil 2007 (iPhone) • C2DM (Push) • WebKit (Chromium) • GPS, acelerómetro, giroscopio, proximidad, luz. • Emulador sobre Eclipse* • Multitarea real desde GB *Genymotion!
  • 4. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Historia: Versiones
  • 5. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Historia: Versiones POSTRES Apple Pie Gingerbread Banana Bread Honeycomb Cupcake Ice Cream Sandwich Donut Jelly Bean Eclair Kit Kat Froyo Lollipop
  • 6. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Historia: Versiones NOMBRE VERSIÓN API NOMBRE VERSIÓN API Apple Pie 1 Gingerbread 9-10 Banana Bread 2 Honeycomb 11-13 Cupcake 3 Ice Cream Sandwich 14-15 Donut 4 Jelly Bean 16-18 Eclair 5-7 Kit Kat 19-20* Froyo 8 Lollipop 21
  • 7. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Workflow: DDD • IDE • Dispositivos/Emuladores • Test App • Code!!! • Desplegar • Depuración • Firmar, test a producción • Alfa, beta (privadas, públicas) • Publicar, promocionar.
  • 8. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Workflow: Soporte Versiones ! ! ! ! ! ! ! ! Densidades y tamaños de pantalla Versión de OpenGL Dashboard 12-2014
  • 9. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Workflow: Soporte Versiones ! ! ! ! ! ! ! ! Densidades y tamaños de pantalla Versión de OpenGL Dashboard 02-2015
  • 10. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Workflow: Requisitos • Android Studio (Beta estable) • Eclipse con ADT oficial (opcional) • Acceso a la documentación y referencia (developer.android.com) • Equipo Android de Depuración (opcional) • Windows OEM Driver • Linux “/etc/udev/rules.d/51-android.rules” file • MacOSX :)
  • 11. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio “Hola Mundo” • Componentes de un proyecto • Actividades • Recursos • Manifiesto • Layouts • Strings • Toast • Intent
  • 12. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Ciclo de vida
  • 13. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Action Bar • Versión de soporte? AppCompat • Menús • Iconos como acciones • Estilos • Recursos
  • 14. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Action Bar • Versión de soporte? AppCompat • Menús • Iconos como acciones • Estilos • Recursos
  • 15. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Layouts: Vistas
  • 16. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Layouts: Organizaciones Comunes • Linear • Relative • WebView • ListView • GridView
  • 17. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Layouts: Pesos • Linear Layout • No hay medidas estáicas • Orientaciones y pesos • ¿Organización? Table 1
  • 18. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Agenda TEMA SESIÓN TEMA SESIÓN Historia 1 Geolocalización 2 Workflow 1 IDE/Debug 3 “Hello World” 1 Fragmentos 3 Ciclo de vida 1 Interfaces 3 Action Bar 1 Notificaciones 4 XML Layouts 1 Consumo APIs 4 Menús 2 GCM 4 Persistencia 2 Q&A 1-4
  • 19. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Menús • Opciones (Acciones) del ActionBar • Menús contextuales de acción • Menú tipo “pop-up”
  • 20. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Menús Contextuales • Fragmentos de listas • Envío de información entre fragmentos • Adaptadores personalizados • Control de eventos de items • Menús contextuales por ítem • Actualización de listas
  • 21. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia • Preferencias compartidas • SQLite • Archivos
  • 22. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: SQLite • Paquete contenedor: android.database.sqlite • Clase contrato • Constantes de nombres de tablas, vistas, columnas, tipos de datos • Con un contrato se puede replicar las tablas, consultas y ejecuciones en todo el código
  • 23. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: SQLite public  class  DatabaseContract  {          //Tabla  Usuarios          public  static  class  Users  implements  BaseColumns{                  public  static  final  String  TABLE_NAME  =  "users";                  public  static  final  String  COLUMN_NAME_NAME  =  "name";                  public  static  final  String  COLUMN_NAME_DRINK  =  "drink";                  public  static  final  String  COLUMN_NAME_SPORT  =  "sport";          }          //  Otras  tablas,  vistas...   }
  • 24. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: SQLite public  class  Ayudante  extends  SQLiteOpenHelper  {   !        public  static  final  String  DATABASE_NAME  =  "nombrebase.db";          public  static  final  int  DATABASE_VERSION  =  1;          public  static  final  String  SQL_CREATE_USERS  =                  "CREATE  TABLE  "  +  Users.TABLE_NAME         +  "  ("+  Users._ID  +  "  INTEGER  PRIMARY  KEY,  "                    +  Users.COLUMN_NAME_NAME  +  "  TEXT,  "         +  Users.COLUMN_NAME_DRINK  +  "  TEXT,  "                  +  Users.COLUMN_NAME_SPORT  +  "  TEXT)";          public  static  final  String  SQL_DELETE_USERS  =         "DROP  TABLE  IF  EXISTS  "  +  Users.TABLE_NAME;   !        //  Otras  Sentencias  ...          //  Las  bases  de  datos,  una  para  leer,  una  para  escribir  datos          SQLiteDatabase  escritor;          SQLiteDatabase  lector;          public  Ayudante(Context  context){                  super(context,  DATABASE_NAME,  null,  DATABASE_VERSION);          }   }
  • 25. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: SQLite public  boolean  insertarUsuario(Usuario  nuevo)  {          ContentValues  values  =  new  ContentValues();   !        values.put(Users.COLUMN_NAME_NAME,  nuevo.name);          values.put(Users.COLUMN_NAME_DRINK,  nuevo.drink);          values.put(Users.COLUMN_NAME_SPORT,  nuevo.sport);   !        long  inserted  =  escritor.insert(                          Users.TABLE_NAME,                          Users.COLUMN_NAME_NAME,                          values);   !        if(inserted  ==  -­‐1)  return  false;          return  true;   }
  • 26. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: SQLite public  List<Usuario>  consultarUsuarios(){   !        String[]  columns  =  {Users._ID,  Users.COLUMN_NAME_NAME,                  Users.COLUMN_NAME_DRINK,  Users.COLUMN_NAME_SPORT};   !        String  selection  =  null;  //Users.COLUMN_NAME_NAME  +  "  like  ?";          String  selectionArgs[]  =  null;  //{"%a%"};          String  groupBy  =  null;  //Users.COLUMN_NAME_SPORT;          String  having  =  null;  //condición  aritmética          String  orderBy  =  null;  //Users._ID;          String  limit  =  null;  //"10";   !        Cursor  results  =  lector.query(Users.TABLE_NAME,    columns,                  selection,  selectionArgs,  groupBy,    having,    orderBy,  limit);          //  results  ya  es  un  cursor  con  los  datos  de  regreso   }
  • 27. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: Archivos • Los directorios son de tipo File, así no sean archivos • Opción correcta para imágenes, o elementos que puedan ser compartidos por red, incluso para borradores de correos, o borradores de configuraciones que puedan ser guardados para beneficio del usuario y evitar complicarlo con llenar de nuevo muchos datos. <uses-­‐permission   android:name="android.permission.WRITE_EXTERNAL_STORAGE"  />   <uses-­‐permission   android:name="android.permission.READ_EXTERNAL_STORAGE"  />
  • 28. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: Archivos Interna • Siempre está disponible, por defecto. Cambiar con android:installLocation • Por defecto accede solo el app • Cuando el usuario des-instala el app, se eliminan los archivos • Es la mejor opción cuando queremos que ni el usuario u otras apps puedan acceder a los datos
  • 29. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: Archivos Externa • No siempre está disponible • No tiene recursos, es WORLD_READABLE • Solo se eliminan los archivos al des-instalar, cuando se guardan en getExternalDir() • Es lo mejor cuando son archivos que queremos que se compartan con otras apps (¿fotos?)
  • 30. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: Preferencias compartidas • Valores en mapa • ruta-app/diccionario recuperado cada apertura • getSharedPreferences() Vs getPreferences() • MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, MODE_PRIVATE • Editor: getEditor(), put…(), commit()
  • 31. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Persistencia: Preferencias compartidas • Ejercicio tres tipos de variables • String • int • boolean
  • 32. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Geolocalización • Fragmentos • Conexión con la cuenta de desarrollado • Firma SHA1
  • 33. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Geolocalización • Manifiesto con permisos de acceso a sensores. • Google Play Services
  • 34. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Geolocalización <uses-­‐permission   android:name="android.permission.INTERNET"/>   <uses-­‐permission   android:name="android.permission.ACCESS_NETWORK_STATE"/>   <uses-­‐permission   android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   <uses-­‐permission   android:name=   "com.google.android.providers.gsf.permission.READ_GSERVICES"/>   ! <!-­‐-­‐  The  following  two  permissions  are  not  required  to  use   Google  Maps  Android  API  v2,  but  are  recommended.  -­‐-­‐>   <uses-­‐permission   android:name="android.permission.ACCESS_COARSE_LOCATION"/>   <uses-­‐permission   android:name="android.permission.ACCESS_FINE_LOCATION"/>
  • 35. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Geolocalización: Java import  com.google.android.gms.maps.MapFragment;   /*…*/   ! MapFragment  elMapaQueVamosAInyectar  =  new  MapFragment();   ! FragmentManager  fm  =  getActivity().getFragmentManager();   ! fm.beginTransaction().add(     R.id.contenedor_mapa  +  mapaId,     elMapaQueVamosAInyectar,     “mapa")   .commit();
  • 36. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Geolocalización: XML <fragment     android:id="@+id/map"     android:layout_width="match_parent"     android:layout_height="match_parent"     class="com.google.android.gms.maps.MapFragment"  />       <FrameLayout  android:id="@+id/contenedor_mapa"   android:layout_width="match_parent"   android:layout_height=“match_parent"></FrameLayout>
  • 37. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Agenda TEMA SESIÓN TEMA SESIÓN Historia 1 Geolocalización 2 Workflow 1 IDE/Debug 3 “Hello World” 1 Fragmentos 3 Ciclo de vida 1 Interfaces 3 Action Bar 1 Notificaciones 4 XML Layouts 1 Consumo APIs 4 Menús 2 GCM 4 Persistencia 2 Q&A 1-4
  • 38. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Debug Escoger punto(s) de interrupción y ejecutar el APK con el insecto.
  • 39. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Debug Llegar al punto de interrupción en el teléfono (ó emulador).
  • 40. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Debug Inspeccionar de ser necesario, continuar.
  • 41. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Fragmentos • Nuevo estándar • Re-utilización de código • Ciclo de vida propio • Transacciones • Diseño multi-screen • Teléfonos • Tabletas • Wear
  • 42. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Fragmentos: Ciclo de vida
  • 43. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Fragmentos: Interfaces • Manera segura de compartir información. • getActivity() funciona desde un fragmento para acceder a otro, pero no de manera segura. • La interfaz exige comunicación y favorece trabajo colaborativo. • Estándar de métodos de comunicación.
  • 44. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Agenda TEMA SESIÓN TEMA SESIÓN Historia 1 Geolocalización 2 Workflow 1 IDE/Debug 3 “Hello World” 1 Fragmentos 3 Ciclo de vida 1 Interfaces 3 Action Bar 1 Notificaciones 4 XML Layouts 1 Consumo APIs 4 Menús 2 GCM 4 Persistencia 2 Q&A 1-4
  • 45. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio Notificaciones Componentes Obligatorios: ! • smallIcon • title • detailedText
  • 46. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio GCM: Google Cloud Messaging https://developer.android.com/google/gcm/index.html
  • 47. #cappacitate2015 | @appsco | @Ministerio_Tic | @Cymetria | @unmultimedio GCM: Google Cloud Messaging • SENDER_ID (API Console) • Verificar SharedPreferences • registerInBackground • Pedir un regId (registration ID) del server GCM • Alojar el ID en la DB propia • Alojar el ID en SharedPreferences ! • BroadcastReceiver escuchando push • IntentService que notifica