TDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoT
Manual para Android
-
Upload
carolina-candia -
Category
Documents
-
view
235 -
download
2
description
Transcript of Manual para Android
![Page 1: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/1.jpg)
Android Master Class Introducción al desarrollo de aplicaciones en Android
![Page 2: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/2.jpg)
Prefacio
Sobre nosotros
Sobre el curso
Sobre Catdroid
![Page 3: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/4.jpg)
1. Introducción a Android
![Page 5: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/5.jpg)
Introducción
Smartphones
Android en cifras
Historia de Android
Funcionamento interno
![Page 6: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/6.jpg)
Smartphones
Teléfono
Rádio
MP3
GPS
Cámera
Internet
Apps
![Page 7: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/8.jpg)
Android en cifras (cont.)
Mòbils al món, segons Gartner (Abril 2011)
![Page 9: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/9.jpg)
Android en cifras (cont.)
![Page 10: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/12.jpg)
Versiones
API level
• 3 (Cupcake) • 7 (Eclair) • 9 (Gingerbread)
![Page 13: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/14.jpg)
Arquitectura
![Page 15: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/17.jpg)
2. El entorno de desarrollo
![Page 18: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/18.jpg)
Elementos necesarios
Eclipse
Android SDK
Eclipse ADT plugin + ADV Manager
![Page 19: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/20.jpg)
Catclipse
Descargar y abrir
Ultimo update: Bolets Barruers
Disponible para Windows y Mac, próximamente para Linux
![Page 21: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/21.jpg)
3. Hola mundo
![Page 22: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/22.jpg)
Creación de un nuevo proyecto
![Page 23: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/23.jpg)
Elementos del proyecto nuevo
Activity
Manifest
Resources
![Page 24: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/25.jpg)
Una Activity básica
![Page 26: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/27.jpg)
Manifest inicial
![Page 28: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/29.jpg)
Definición de la actividad
Definimos las actividades y sus intent-filter
![Page 30: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/30.jpg)
Versión del SDK
minSdkVersion, maxSdkVersion y targetSdkVersion
![Page 31: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/36.jpg)
Ejemplo
![Page 37: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/37.jpg)
4. El ciclo de vida
![Page 38: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/39.jpg)
Ciclo de vida de una actividad
![Page 40: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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 onResume
onStop 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
onResume onStop
onStop La actividad ya no es visible al usuario. onRestart onDestroy
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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/41.jpg)
Otro grafo
![Page 42: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/44.jpg)
5. Recursos
![Page 45: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/46.jpg)
Iconos
Simplificados
Realísta pero no fotorealista
Imágen frontal
Iluminación superior
![Page 47: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/52.jpg)
7. Interacción con el usuario
![Page 53: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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 @Override public void onClick(View v){ switch(v) { case R.id.btnOk: … case R.id.btnCancel: … } }
![Page 57: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/58.jpg)
Diálogos. setButtons
AlertDialog: puede gestionar entre 0 y 3 respuestas AlertDialog.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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/61.jpg)
Crear un diálogo personalizado
Hemos creado el layout custom_dialog Context 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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/62.jpg)
Menús
![Page 63: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/66.jpg)
9. Preferencias
![Page 67: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/69.jpg)
Leer y escribir preferencias
PreferenceManager.getDefaultSharedPreferences(context)….
getTipo(Nombre, Predeterminado);
setTipo(Nombre, Predeterminado);
![Page 70: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/71.jpg)
10. Intents
![Page 72: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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/1 Partes 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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/html5/thumbnails/77.jpg)
Ejemplo
![Page 78: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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: Manual para Android](https://reader031.fdocuments.us/reader031/viewer/2022020322/568c37491a28ab02359b174e/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