android master class
DESCRIPTION
TRANSCRIPT
![Page 1: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/1.jpg)
Android Master ClassIntroducción al desarrollo de aplicaciones en Android
![Page 2: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/2.jpg)
Prefacio
Sobre nosotros
Sobre el curso
Sobre Catdroid
![Page 3: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/3.jpg)
Temario
1. Introducción
2. Eclipse y el SDK
3. Hello World
4. El ciclo de vida
5. Recursos
6. Layouts y Views
7. Interacción con el usuario
8. Menús
9. Preferencias
10. Intents
11. Depuración
12. El Market
![Page 4: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/4.jpg)
1. Introducción a Android
![Page 5: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/5.jpg)
Introducción
Smartphones
Android en cifras
Historia de Android
Funcionamento interno
![Page 6: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/6.jpg)
Smartphones
Teléfono
Rádio
MP3
GPS
Cámera
Internet
Apps
![Page 7: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/7.jpg)
Android en cifras
#1 en activaciones (350.000 al día)
23% de la cuota de mercado (finales 2010)
250.000+ apps en el market
100+ modelos de teléfono
40+ modelos de tablet
![Page 8: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/8.jpg)
Android en cifras (cont.)
Mòbils al món, segons Gartner (Abril 2011)
![Page 9: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/9.jpg)
Android en cifras (cont.)
![Page 10: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/10.jpg)
¿Qué es Android?
Conjunto de software para dispositivos móviles que incluye:• Sistema operativo• Middleware• Aplicaciones
Open source
Impulsado por Google
Basado en Linux y Java
![Page 11: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/11.jpg)
Historia
Julio 2005: Google compra Android Inc.
Noviembre 2007: Nace la OHA
Febrero 2009: Release de 1.1
Abril 2009: Release de 1.5 (Cupcake)
Octubre 2009: Release de 2.0 (Eclair)
Deciembre 2010: Release de 2.3 (Gingerbread)
![Page 12: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/12.jpg)
Versiones
API level• 3 (Cupcake)• 7 (Eclair)• 9 (Gingerbread)
![Page 13: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/13.jpg)
Características
Sistema base es Linux
Máquina virtual Dalvik
Librerías de sistema• WebKit• SQLite• Media codecs• Comunicaciones (GSM, bluetooth, wifi)• Cámara, GPS, sensores
Application framework
![Page 14: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/14.jpg)
Arquitectura
![Page 15: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/15.jpg)
Aplicaciones
Java (.apk)
Se ejecutan en un espacio aislado (instancia de Dalvik)
No hay jerarquía
Se comunican a través de Intents
El market no es imprescindible
![Page 16: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/16.jpg)
Más información
Web oficial Android• http://www.android.com/• http://developer.android.com/index.html
Wikipedia• http://es.wikipedia.org/wiki/Android
CatDroid• http://catdroid.org/
![Page 17: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/17.jpg)
2. El entorno de desarrollo
![Page 18: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/18.jpg)
Elementos necesarios
Eclipse
Android SDK
Eclipse ADT plugin + ADV Manager
![Page 19: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/19.jpg)
Instalación
1. Preparar el equipo (Instalar Eclipse)
2. Descargar el SDK
3. Instalar el plugin ADT para Eclipse
4. Instalar plataformas y APIs
http://developer.android.com/sdk/installing.html
![Page 20: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/20.jpg)
Catclipse
Descargar y abrir
Ultimo update: Bolets Barruers
Disponible para Windows y Mac, próximamente para Linux
![Page 21: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/21.jpg)
3. Hola mundo
![Page 22: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/22.jpg)
Creación de un nuevo proyecto
![Page 23: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/23.jpg)
Elementos del proyecto nuevo
Activity
Manifest
Resources
![Page 24: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/24.jpg)
Activities
Una Activity es una pantalla de la interfaz
Las aplicaciones constan de una o más Activity
Cada Activity es reponsable de guardar su estado
Una Activity se encarga de:• Crear una ventana donde colocar la interfaz • Gestionar la interfaz• Responder a los eventos (onClick, onLongClick, etc).
![Page 25: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/25.jpg)
Una Activity básica
![Page 26: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/26.jpg)
Manifest
El Manifest es el archivo donde la aplicación le dice al sistema que elementos requiere para funcionar
Siempre debe llamarse AndroidManifest.xml y estar en la raíz del proyecto
Entre otras cosas contiene:• Atributos de la aplicación y metadatos• La declaración de actividades y otros componentes• Librerías externas• Permisos
Se puede editar via GUI o editando el XML
![Page 27: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/27.jpg)
Manifest inicial
![Page 28: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/28.jpg)
Versión de la aplicación
VersionCode es importante para el Market
VersionName es importante para el usuario y/o nosotros
![Page 29: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/29.jpg)
Definición de la actividad
Definimos las actividades y sus intent-filter
![Page 30: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/30.jpg)
Versión del SDK
minSdkVersion, maxSdkVersion y targetSdkVersion
![Page 31: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/31.jpg)
Permisos de la aplicación
Avisan al usuario de las acciones que realizará la aplicación
Listados en: http://developer.android.com/reference/android/Manifest.permission.html
![Page 32: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/32.jpg)
Recursos
Un recurso es un elemento a utilizar durante la ejecución de la aplicación
Existen diferentes tipos de recursos:• Layouts• Imágenes• Cadenas de texto• Sonidos• Colores• Temas• Animaciones• etc
![Page 33: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/33.jpg)
Recursos
Se almacenan en la carpeta resources
Cada tipo de recurso tiene va en una carpeta específica
Utilizan sufijos para determinar que recursos utilizar según contexto (tamaño de pantalla, idioma, orientación, etc.)
Nombre en mínusculas
La extensión se ignora (mismo nombre, diferente extensión se considera duplicado)
![Page 34: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/34.jpg)
La clase R
La clase R es generada y mantenida por el sistema y no debe ser modificada
Contiene un identificador (int) único por cada recurso
Podemos hacer referencia a un recurso en código por R.<tipo>.<nombre>. Ej.: R.layout.main
![Page 35: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/35.jpg)
Nombrar recursos en XML
Para referirnos a un recurso utilizamos la siguiente sintaxis:
@<tipo de recurso>/<nombre del recurso>
Por ejemplo
@string/app_name
Para definir un nombre utilizamos:
@+<tipo de recurso>/<nombre de recurso>
![Page 36: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/36.jpg)
Ejemplo
![Page 37: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/37.jpg)
4. El ciclo de vida
![Page 38: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/38.jpg)
Estados de una actividad
El sistema gestiona las actividades como una pila
Una actividad tiene cuatro estados:• Activa: la actividad está en primer plano y tiene el focus (enfoque
de usuario). Se encuentra en lo alto de la pila.• En pausa: la actividad es visible, pero no tiene el focus. Ej: hay un
diálogo sobre ella con el focus retenido.• Detenida: La actividad está tapada por otra aplicación. Mantiene
sus datos.• Destruida: Una actividad detenida ha sido destruida para liberar
memoria y ha perdido sus datos. Hay que recrearla completamente.
![Page 39: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/39.jpg)
Ciclo de vida de una actividad
![Page 40: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/40.jpg)
Métodos
Método Descripción Siguiente
onCreate() Donde se crea la interfaz. Se le proporciona un bundle con su estado anterior.
onStart
onRestart() Justo antes de un onStart cuando venimos de onStop onStart
onStart() La actividad se hace visible al usuario onResumeonStop
onResume() La actividad está en primer plano interactuando con el usuario
onPause
onPause La actividad va a ser detenida. Se utiliza para guardar información
onResumeonStop
onStop La actividad ya no es visible al usuario. onRestartonDestroy
onDestroy Última llamada antes de que la actividad sea destruida. El método isFinishing() nos ayuda a saber si es final o temporal
![Page 41: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/41.jpg)
Otro grafo
![Page 42: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/42.jpg)
Ejercicio (I)
Clase android.util.Log
Log.<método>(String tag, String message)
Métodos:• e – error• d – debug• i – info• v – verbose• w – warning
private static final String TAG = "MyActivity";Log.v(TAG, "index=" + i);
![Page 43: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/43.jpg)
Ejercicio(II)
@Override…
protected void onDestroy()
protected void onPause()
protected void onRestart()
protected void onResume()
protected void onStart()
protected void onStop()
![Page 44: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/44.jpg)
5. Recursos
![Page 45: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/45.jpg)
Imágenes
Carpeta drawables
Tres tamaños: ldpi, mdpi, hdpi
Tamaño ldpi mdpi hdpi
Relación 0.75 1 1.5
Launcher 36x36 px 48x48 px 72x72 px
Menu 36x36 px 48x48 px 72x72 px
Status Bar (<=2.2) 19x19 px 25x25 px 38x38 px
Status Bar (>=2.3) 12x19 px 16x25 px 24x38 px
Tab 24x24 px 32x32 px 48x48 px
![Page 46: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/46.jpg)
Iconos
Simplificados
Realísta pero no fotorealista
Imágen frontal
Iluminación superior
![Page 47: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/47.jpg)
Formatos de imágen
Recomendación:• PNG-24 para imágenes con transparencias• JPG para imágenes sin transparencias
![Page 48: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/48.jpg)
Archivos de cadenas
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="resource name1">cadena</string>
<string name="resource name2">cadena</string>
<string name="resource name3">cadena</string>
….
</resources>
![Page 49: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/49.jpg)
Arrays de cadenas
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="SearchTimeFrameArray">
<item>@string/SearchTimeFrameAll</item>
<item>@string/SearchTimeFrame24h</item>
<item>@string/SearchTimeFrame48h</item>
<item>@string/SearchTimeFrameWeek</item>
…
<Spinner android:entries="@array/ SearchTimeFrameArray " android:prompt="@string/ SearchTimeFrame " android:id="@+id/SearchTime"/>
![Page 50: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/50.jpg)
Colores
Format: #rgb | #rrggbb | #rrggbbaa
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="background">#FFF</color>
<color name="text">#000</color>
<color name="hbackground">#eb5200</color>
<color name="htext">#fff</color>
<color name="dimtext">#444</color>
</resources>
![Page 51: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/51.jpg)
Uso de recursos desde código
El objeto R.tipo.id siempre devuelve un entero
Para recuperar el recurso en cuestión utilizamos:
getResources().get<tipo>(Integer id)
O
getResources().getIdentifier(String nombre, String tipo)
![Page 52: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/52.jpg)
7. Interacción con el usuario
![Page 53: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/53.jpg)
Eventos
Los layouts generan eventos de tipo onAcción
Los eventos son acciones que interrumpen el flujo del código
Se generan a partir de acciones externas
Para implementar un método onAcción una clase debe implementar la interfaz onAcciónListener
Para adjudicar la clase que implmementa el «escuchador» utilizamos el método setOnAcciónListener de la vista
![Page 54: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/54.jpg)
Ejemplo con dos clases
public class alHacerClick implements OnClickListener { @Override public void onClick(View v){ v.setText("Click aqui!"); }}...public class Main extends Activity { ... boton.setOnClickListener(new alHacerClick()); ...}
![Page 55: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/55.jpg)
Ejemplo con la actividad
public class Main extends Activity implements OnClickListener {
@Override public void onClick(View v){ v.setText("Click aqui!"); } ... boton.setOnClickListener(this); ...}
![Page 56: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/56.jpg)
Múltiples eventos en la misma clase
Si tenemos a nuestra clase escuchando más de un evento OnClick, el parametro v nos permite averiguar que view ha disparado el evento.
Podemos comparar v.getId() con un recurso R.id
@Overridepublic void onClick(View v){ switch(v) { case R.id.btnOk: … case R.id.btnCancel: … }}
(v.getId()==R.Id.btnOk)
![Page 57: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/57.jpg)
Un brindis con el usuario
La clase toast permite lanzar mensajes rápidos
Toast.makeText(Context context, int resId, int duration)
Toast makeText(Context context, CharSequence text, int duration)
Duration: Toast. LENGTH_LONG | Toast.LENGTH_SHORT
![Page 58: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/58.jpg)
Diálogos. setButtons
AlertDialog: puede gestionar entre 0 y 3 respuestasAlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage("Are you sure you want to exit?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { MyActivity.this.finish(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } });AlertDialog alert = builder.create();
![Page 59: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/59.jpg)
Diálogos. Una lista.
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); }});AlertDialog alert = builder.create();
![Page 60: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/60.jpg)
Diálogos. Checkboxes
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); }});AlertDialog alert = builder.create();
![Page 61: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/61.jpg)
Crear un diálogo personalizado
Hemos creado el layout custom_dialogContext mContext = getApplicationContext();Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.custom_dialog);dialog.setTitle("Custom Dialog");
TextView text = (TextView) dialog.findViewById(R.id.text);text.setText("Hello, this is a custom dialog!");ImageView image = (ImageView) dialog.findViewById(R.id.image);image.setImageResource(R.drawable.android);
dialog.show();
![Page 62: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/62.jpg)
Menús
![Page 63: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/63.jpg)
Menús. Archivos de menú
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
…
<item android:id="@+id/settings" android:title="@string/settings_label"
android:alphabeticShortcut="@string/settings_shortcut" />
…
</menu>
![Page 64: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/64.jpg)
Abrir el menú
Sobrecargamos el método onCreateOptionsMenu
public boolean onCreateOptionsMenu(Menu menu)
Llamamos a GetMenuInflater
MenuInflater inflater = getMenuInflater();
Llamamos al método inflate del MenuInflater
MenuInflater inflater = getMenuInflater();
![Page 65: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/65.jpg)
Procesar las opciones de menú
Sobrecargamos el método onOptionsItemSelected@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
...
}
![Page 66: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/66.jpg)
9. Preferencias
![Page 67: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/67.jpg)
Archivos de preferencias
Layout especializado que permite crear pantallas de configuración de forma rápida.<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference android:key="music"
android:title="@string/music_title" android:summary="@string/music_summary"
android:defaultValue="true" />
<CheckBoxPreference android:key="hints"
android:title="@string/hints_title" android:summary="@string/hints_summary"
android:defaultValue="true"/>
</PreferenceScreen>
![Page 68: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/68.jpg)
Mostrar archivo de preferencias
public class Prefs extends PreferenceActivity {
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
En el manifest:<activity android:name=".Prefs" android:label="@string/settings_title" />
![Page 69: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/69.jpg)
Leer y escribir preferencias
PreferenceManager.getDefaultSharedPreferences(context)….
getTipo(Nombre, Predeterminado);
setTipo(Nombre, Predeterminado);
![Page 70: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/70.jpg)
Gestionar opciones@Override
public boolean onPreferenceClick(Preference preference){
if (preference.getKey() == "About"){
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.about);
dialog.setTitle(getResources().getString(R.string.OptionAbout));
dialog.setCancelable(true);
dialog.show();
}
if (preference.getKey() == "DoLogin"){
findPreference("User").setEnabled(
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("DoLogin", false));
indPreference("Password").setEnabled(
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("DoLogin", false));
}
return false;
}
![Page 71: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/71.jpg)
10. Intents
![Page 72: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/72.jpg)
Intents
Android se basa en multitud de pequeños componentes
Estos componentes se comunican via Intents
Mensajes utilizados para notificar a las aplicaciones de eventos• Cambios de Hardware. Ej: tarjeta SD insertada.• Recepción de datos. Ej: llegada de un sms• Eventos de la apliación. Ej: se ha lanzado la aplicación• Etc
Es posible crear nuestros propio intents
![Page 73: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/73.jpg)
Partes de un Intent
Partes básicas• La acción: una constante que indica la acción que se lanza. Ej.:
VIEW_ACTION, EDIT_ACTION• Los datos: uri indicando el recurso asociado. Ej.:
content://contacts/people/1Partes opcionales
• Una categoría: agrupa el tipo de Intent• Un tipo MIME: indica el tipo de recurso si no concemos una uri• Un componente: la clase que debe tener el receptor. Obvia las
otras propiedades, pero es más frágil.• Extras: un Bundle con información extra que el receptor va a
necesitar
![Page 74: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/74.jpg)
Ejemplos de Intent
ANSWER_ACTION
CALL_ACTION
DELETE_ACTION
DIAL_ACTION
EDIT_ACTION
FACTORY_TEST_ACTION
GET_CONTENT_ACTION
INSERT_ACTION
MAIN_ACTION: Inicio de aplicación
PICK_ACTION: permitir a otras apps elegir contenido de la tuya
VIEW_CONTENT: para ver contenido
EDIT_CONTENT: para editar contenido
![Page 75: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/75.jpg)
Categorias de Intent
ALTERNATIVE_CATEGORY
BROWSABLE_CATEGORY
DEFAULT_CATEGORY
GADGET_CATEGORY
HOME_CATEGORY
LAUNCHER_CATEGORY
PREFERENCE_CATEGORY
SELECTED_ALTERNATIVE_CATEGORY
TAB_CATEGORY
TEST_CATEGORY
![Page 76: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/76.jpg)
Llegando a la actividad adecuada
Una actividad debe cumplir tres reglas para responder un Intent• La actividad debe soportar la acción especificada• La actividad debe soportar el tipo MIME si lo hay• La actividad debe soportar TODAS las categorias nombradas en el
Intent
Uso de Intent-Filter en el manifest
![Page 77: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/77.jpg)
Ejemplo
![Page 78: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/78.jpg)
Iniciar otra Activity
Uso del método startActivity(Intent) o startActivityForResult (Intent, int)
Podemos pasar parametros con Intent.putExtra(int, <type>)
Recibirlos con getIntent().getExtras().get<Type>(clave);
![Page 79: Android master class](https://reader035.vdocuments.co/reader035/viewer/2022062307/553ade72550346a43f8b45fe/html5/thumbnails/79.jpg)
Devolver valores de una Activity
Establecemos el valor a devolver con setResult(int resultCode) o setResult (int resultCode, Intent data)
La actividad «llamadora» implementa el método onActivityResult(int requestCode, int resultCode, Intent data)
resultCode puede ser uno de estos valores:• RESULT_CANCELED• RESULT_OK• RESULT_FIRST_USER