Post on 07-Nov-2014
description
Dev fest Android application - case study
Daniele BottilloGDG Bologna
Indice
● l'applicazione
● da dove siamo partiti
● che cosa abbiamo fatto
● come l'abbiamo fatto
● i problemi incontrati
L'applicazione
L'applicazione
● agenda devfest
● dettaglio talk
● condivisione talk
● aggiunta talk al calendario
● lista sponsor
● about
Da dove siamo partiti
● GDG Bologna è in "partenza"
● supporto agli organizzatori
● conoscenza di Android
● hey ma un'applicazione Android per la devfest non esiste?
● GDG Berlin / GDG Zurich (ieri)
Requisiti / Punto di partenza
● 15-20 giorni di tempo
● lavoro notturno e nei weekend
● progettazione in pausa pranzo
● ragazze imbufalite
Punto di partenza tecnico
● non abbiamo tempo
● android 4.0
● solo smartphone
● fragment ed intent
● ragazze imbufalite
Progettazione
Progettazione
Main Activity
View Pager
Fragment Agenda Fragment Sponsor
Fragment Talk
About Activity
Progettazione
● genericità
● devfest è ciclica
● progetto android dev-fest
● progetto android dev-fest-2012
● libreria android
Android Library
● progetto non compila più!
● creare riferimento alla libreria
● override
● strings.xml
Sviluppo
● nuovo progetto Eclipse
● Build SDK: Android 4.1 (API 16)
● Minimum Required SDK: Android 4.0 (API 14)
● android compatibility package
Sviluppo - Agenda
● viewpager
● fragment
● custom adapter (section list)
● no images!
Sviluppo - Dettaglio Talk
● dialog fragment
● images!
● intent per condivisione
● intent per aggiunta a calendario
Sviluppo - Intent condivisioneIntent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, talk.getTitle()+" - "+talk.getSpeaker());
startActivity(Intent.createChooser(intent, app.getResources().getString(R.string.title_sharing_dialog)));
Sviluppo - Intent calendarioIntent intent = new Intent(Intent.ACTION_EDIT);intent.setData(Events.CONTENT_URI)
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, talk.getStart().getTimeInMillis())
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, talk.getEnd().getTimeInMillis())
.putExtra(Events.TITLE, talk.getTitle())
.putExtra(Events.EVENT_LOCATION, talk.getPlace())
startActivity(intent);
Sviluppo - Libreria
List Fragment
android-devfestandroid-devfest-2012
json strings.xml
<string-array name="fest"> <item>Firenze</item> <item>Sicilia</item></string-array>
Class jsonRaw = R.raw.class;
Field field = jsonRaw.getField(fest[0].toLowerCase());
InputStream is = activity.getResources().openRawResource(field.getInt(null));
Sviluppo - NFC
String url = "https://play.google.com/store/apps/details?id=org.gdgbologna.devfest2012"; byte[] payload = url.getBytes();
NdefRecord ndefRecord = new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, new byte[0], payload);
mNdefPushMessage = new NdefMessage(new NdefRecord[] { ndefRecord });
mNfcAdapter.setNdefPushMessage(mNdefPushMessage, this);
Problemi incontrati
● intent calendario○ +1 per i nexus○ insulti per HTC, SAMSUNG, etc..
● fragment○ bellissima idea○ portano via tempo...○ gestione ciclo di vita e viewpager
Riferimenti
● http://code.google.com/p/android-devfest/
● http://code.google.com/p/android-devfest-2012/
● http://www.gdg-bologna.org/ (in terminazione)
● GDG Bologna - Google +
Fine
● Daniele Bottillo○ www.danielebottillo.com○ twitter: cribcaged7