PDF de programación - Taller - Mi Primera Aplicación Android

Imágen de pdf Taller - Mi Primera Aplicación Android

Taller - Mi Primera Aplicación Androidgráfica de visualizaciones

Publicado el 9 de Marzo del 2021
126 visualizaciones desde el 9 de Marzo del 2021
600,7 KB
48 paginas
Creado hace 10a (16/04/2011)
Taller

Mi Primera Aplicación Android

Sobroso Party

Abril 2011



Alberto Alonso Ruibal
[email protected]
http://www.mobialia.com
T: @mobialia @albertoruibal

Nuestra aplicación: Wikiplaces

Obtendrá los lugares de la Wikipedia cerca de
nuestra posición mostrándolos en un mapa y en una
lista
Veremos ejemplos de:
● Layouts, ListViews, PreferenceActivity...
● API de geolocalización
● API de Google Maps
● Obtención de datos mediante JSON



Desarrollar para Android

● Lenguaje Java
● También posible en C, hay un

NDK

● API muy completa y sencilla
● SDK para Linux/Windows/Mac

con emulador

● Eclipse IDE (es la opción oficial,

hay otras posibilidades como
IntelliJ IDEA)



El SDK de Android

● http://developer.android.com/sdk/
● En el SDK/AVD manager se seleccionan las

plataformas necesarias y se descargan

● También permite configurar los dispositivos

emulados

(Virtual Devices)



El emulador

● Permite simular distintos dispositivos / tamaños

de pantala

● Completamente funcional aunque algo lento



Eclipse IDE

IDE muy versátil para Java, PHP, C++...
http://www.eclipse.org
Instalación del plugin ADT
● Abrir Eclipse
● Seleccionar Help → Software Updates… →

Available Software

● En la ventana escoger “Add Site” , e introducir la

ubicación:

https://dl-ssl.google.com/android/eclipse/



Crear un nuevo proyecto en Eclipse

File->New->Android Project
Cubrimos los detalles con:
Project name: WikiPlaces
Build Target : Google APIs 1.6
Application name: WikiPlaces
Package name:
com.mobialia.wikiplaces
Create Activity: WikiPlaces
Min SDK Version: 4
Pulsa Finish



Componentes de una aplicación

Se definen en el AndroidManifest.xml, en el cual
también se indican los permisos necesarios, la
versión de Android exigida, etc
● Actividades
● Servicios
● Intents: sistema de comunicación entre

aplicaciones/actividades



Estructura de directorios

src/
gen/
assets/
res/
| drawable-hdpi/
| drawable-ldpi/
| drawable-mdpi/
| layout/
| raw/
| values/
| values-es/


Código fuente
Archivos generados a partir de los recursos
Ficheros a los que va a acceder la aplicación
Carpeta de recursos
Imágenes alta resolución (dpi)
Imágenes baja resolución
Imágenes media resolución
Disposición de elementos en pantalla
Archivos de datos (sonidos por ejemplo)
Definición de textos, colores, estilos, etc
Cadenas localidadas a un idimoa linguaxe



Primera actividad: Dashboard

Vamos a implementar en la clase WikiPlacesActivity
un Dashboard desde el cual accederemos a las
distintas secciones de la aplicación:
● Ver un mapa
● Ver una lista
● Actualizar los datos
● Acceder a las preferencias
Utilizaremos los patrones Dashboard y ActionBar
http://www.google.com/events/io/2010/sessions/android-ui-design-patterns.html



Ciclo de vida de las Actividades

Hay varios métodos
dentro de nuestra
actividad que son
llamados cuando
cambia de estado



Definición del Layout

● ViewGroups:
LinearLayout,
TableLayout,
RelativeLayout...
● Views: TextView,

ListView, o
personalizadas

● Editor WYSIWYG: pero
siempre es mejor acudir
al XML



Dashboard: Layout

Crearemos un res/layout/dashboard.xml para el cual
nos debería llegar con:
● LinearLayout
● Button, ImageButton,Textview
Simplificaremos el layout utilizando:
● values/strings.xml para las cadenas de texto
● values/colors.xml para los colores
● values/styles.xml para los estilos
http://www.alonsoruibal.com/using-styles-on-android-layouts/



Dashboard: Activity

En la clase WikiplacesActivity introduciremos:
public void onCreate(Bundle bundle) {

super.onCreate(icicle);

// Quitamos la barra de título

requestWindowFeature(Window.FEATURE_NO_TITLE);

requestWindowFeature(Window.FEATURE_PROGRESS);

// Establecemos el contenido

setContentView(R.layout.dashboard);

}



Dashboard: Botones con imágenes
● drawable_hdpi/dashboard_preferences_default.png
● drawable_hdpi/dashboard_preferences_selected.png
● drawable/dashboard_preferences.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@drawable/dashboard_preferences_selected"/>
<item android:state_pressed="true" android:drawable="@drawable/dashboard_preferences_selected"/>
<item android:state_focused="false" android:state_pressed="false"
android:drawable="@drawable/dashboard_preferences_default"/>
</selector>
● Y en nuestro layout ponemos:
<Button style="@style/DashBoardAction"
android:drawableTop="@drawable/dashboard_preferences"
android:text="@string/dashboard_preferences"
android:onClick="onPreferencesAction"
/>
● Al pulsarlo llamará al método onPreferencesAction de nuestra

actividad

public void onPreferencesAction(View v) {
...

}



Lanzando otra actividad: Intents

● Por ejemplo, para lanzar una nueva actividad

cuando pulsamos el botón de preferencias:

public void onPreferencesAction(View v) {
Intent intent = new Intent(getApplicationContext(), PreferencesActivity.class);
startActivity(intent);
}
● Creamos la nueva clase de la actividad: también

debemos añadirla en el AndroidManifest.xml:

<activity android:name="PreferencesActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.EMBED" />
</intent-filter>
</activity>



Actividad para las prefencias

● La clase de la Actividad es tremendamente sencilla:
public class PreferencesActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML
addPreferencesFromResource(R.layout.preferences);
}
}
● En layout/preferences.xml definimos los campos que

va a tener nuestra pantalla de preferencias con
ListPreference, CheckboxPreference,
EditTextPrefrence...



Definiendo preferencias en el XML

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<ListPreference
android:key="distance"
android:title="@string/preferences_distance"
android:summary="@string/preferences_distance_summary"
android:entries="@array/distances_texts"
android:entryValues="@array/distances_values"
android:dialogTitle="@string/preferences_distance"
android:defaultValue="20"
android:selectable="true"
/>
<CheckBoxPreference
android:key="satellite"
android:title="@string/preferences_satellite"
android:summary="@string/preferences_satellite_summary"
android:defaultValue="false"/>
<CheckBoxPreference
android:key="fullscreen"
android:title="@string/preferences_fullscreen"
android:summary="@string/preferences_fullscreen_summary"

android:defaultValue="false"/>
</PreferenceScreen>



Obteniendo valores de preferencias

● Ya de nuevo en el onResume de WikiplacesActivity

vamos a obtener la preferencia “fullscreen” y actuar en
función de su valor:
SharedPreferences sharedPref =
PreferenceManager.getDefaultSharedPreferences(this);
fullscreen = sharedPref.getBoolean("fullscreen", false);

if (fullscreen) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
getWindow().setFlags(0,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}



Obteniendo la ubicación (I)

● Para hacer que nuestra actividad principal obtenga la ubicación,

primero añadimos los permisos en el AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
● Después implementamos LocationListener
.... implements LocationListener

public void onLocationChanged(Location location) {
Log.d(TAG, “Location Received!!!!”);
}

public void onProviderDisabled(String provider) {}

public void onProviderEnabled(String provider) {}

public void onStatusChanged(String provider, int status, Bundle extras) {}



Obteniendo la ubicación (II)

● Ahora solicitamos actualizaciones de la ubicación con dos proveedores

de ubicación (sí dos!):

manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

Criteria criteria = new Criteria();
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);

criteria.setAccuracy(Criteria.ACCURACY_FINE);
providerFine = manager.getBestProvider(criteria, true);

criteria.setAccuracy(Criteria.ACCURACY_COARSE);
providerCoarse = manager.getBestProvider(criteria, true);

if (providerCoarse != null) manager.requestLocationUpdates(providerCoarse, 5*60000, 100,
this); // update each 5 minutes
if (providerFine != null) manager.requestLocationUpdates(providerFine, 5*60000, 100, this
); // update each 5 minutes

http://www.alonsoruibal.com/using-two-locationproviders-on-android/



Simulando la ubicación en el

emulador

● Nuestro ordenador no

tiene GPS, pero el
emulador nos permite
“simular” ubicaciones
introduciendo longitud
y latitud



Obteniendo los datos a mostrar

● Añadir a la aplicación el permiso para conectarse Internet
<uses-permission android:name="android.permission.INTERNET" />
● Utilizaremos los servicios de GeoNames

http://www.geonames.org/

● Primero creamos una cuenta en

http://www.geonames.org/login

● Y habilitamos los “Free Web Services” en:
http://www.geonames.org/manageaccount

● Par
  • Links de descarga
http://lwp-l.com/pdf18973

Comentarios de: Taller - Mi Primera Aplicación Android (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad