GDG L-Ab for Droidcon Italy 2014
Torino 6-7 Febbraio

CODELAB ACTIVITY RECOGNITION
Preparare l’ambiente:
Intallare ADT Bun...
GDG L-Ab for Droidcon Italy 2014
Torino 6-7 Febbraio
Step 2:
Come accennato in precedenza il metodo getNameFromType(int ac...
GDG L-Ab for Droidcon Italy 2014
Torino 6-7 Febbraio
Step 5:
Iniziamo l’update, richiedendo periodicamente al dispositivo
...
GDG L-Ab for Droidcon Italy 2014
Torino 6-7 Febbraio
private void getAddress(Location loc){
Geocoder geo = new Geocoder(ge...
Upcoming SlideShare
Loading in …5
×

Droidcon Italy 2014 on Train - Codelab step

625 views
474 views

Published on

Step of Codelab about Activity Recognition from Droidcon Italy 2014.

Code avaible on:
https://github.com/GDG-L-Ab/DroidconTrain_ActivityRequest

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
625
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Droidcon Italy 2014 on Train - Codelab step

  1. 1. GDG L-Ab for Droidcon Italy 2014 Torino 6-7 Febbraio CODELAB ACTIVITY RECOGNITION Preparare l’ambiente: Intallare ADT Bundle o Android Studio Piccola nota: Abbiamo avuto problemi con Android Studio? Si è vero. Impieghiamo troppo tempo inizialmente a capire come funziona e cosa può darci in più? Si è vero. Ma tutti gli sforzi iniziali verranno ripagati senza ombra di dubbio. Si sta spingendo molto in questa direzione, consigliamo vivamente di iniziare ad utilizzarlo. Creare un nuovo progetto. Includere la libreria Google Play Services Step 1: Andiamo a studiare l’intent, il cuore della nostra applizaione. Con questo intent chiediamo di fatto cosa sta facendo l’utente, con una certa precisione che viene recuperata con il metodo getConfidence(). Il metodo getMostProbableActivity() è il metodo che ritorna una DetectedActivity, che verrà poi utilizzata per recuperare il contesto. La DetectedActivity viene passata al metodo getType() il quale restituisce un int che potremo utilizzare nel metodo getNameFromType(int activityType). Quest’ultimo metodo, ritorna una string contenente il contesto che andremo poi a visualizzare nella MainActivity. public class ActivityRecognitionIntentService extends IntentService{ public ActivityRecognitionIntentService() { super("ActivityRecognitionIntentService"); // TODO Auto-generated constructor stub } @Override protected void onHandleIntent(Intent intent) { if (ActivityRecognitionResult.hasResult(intent)) { ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent); DetectedActivity mostProbableActivity = result.getMostProbableActivity(); int activityType = mostProbableActivity.getType(); String activityName = getNameFromType(activityType); Message msg = new Message(); msg.obj = activityName; MainActivity.mHandler.sendMessage(msg); Giuseppe Cerratti - giuseppe.ciuffo@gmail.com - Giovanni Laquidara - glaquidara@gmail.com GDG L-AB Team
  2. 2. GDG L-Ab for Droidcon Italy 2014 Torino 6-7 Febbraio Step 2: Come accennato in precedenza il metodo getNameFromType(int activityType) è il metodo che ritorna la string con il contesto ricavato dalla DetectedActivity. private String getNameFromType(int activityType) { switch(activityType) { case DetectedActivity.IN_VEHICLE: return "in_vehicle"; case DetectedActivity.ON_BICYCLE: return "on_bicycle"; case DetectedActivity.ON_FOOT: return "on_foot"; case DetectedActivity.STILL: return "still"; case DetectedActivity.UNKNOWN: return "unknown"; case DetectedActivity.TILTING: return "tilting"; } return "unknown"; Step 3: Nell’onCreate andiamo ad inizializzare tutte le classi che ci occorreranno per aggiornare periodicamente l’ActivityRecognition e recuperare la posizione quando il dispositivo è fermo. @Override public void onCreate(Bundle savedInstanceState) { … mLocationRequest = new LocationRequest(); mLocationClient = new LocationClient(getBaseContext(), mLocationRequest, mLocationRequest); mDetectionRequester = new DetectionRequester(getBaseContext()); mDetectionRemover = new DetectionRemover(); Step 4: In onStart verifichiamo che Google Play Services sia raggiungibile. public void onStart() { super.onStart(); mUpdatesRequested = true; if (servicesConnected()) { startPeriodicUpdates(); } mLocationClient.connect(); } Giuseppe Cerratti - giuseppe.ciuffo@gmail.com - Giovanni Laquidara - glaquidara@gmail.com GDG L-AB Team
  3. 3. GDG L-Ab for Droidcon Italy 2014 Torino 6-7 Febbraio Step 5: Iniziamo l’update, richiedendo periodicamente al dispositivo private void startPeriodicUpdates() { … mDetectionRequester.requestUpdates(); } Step 6: Una volta scritta, tramite un Handler, nell’apposita TextView la stringa contenente il contesto ritornato, andiamo a recuperare la posizione corrente, nel caso in cui il messaggio dell’Handler sia uguale a “still”. mHandler = new Handler() { @Override public void handleMessage(Message msg) { String text = (String)msg.obj; teVi_currentAct.setText(text); if (text.equals("still")) { getLocation(); } } }; Step 7: Ciò è possibile grazie al metodo: getLocation() che andrà a recuperare la location attuale. public void getLocation(){ Location mCurrentLocation = mLocationClient.getLastLocation(); try { getAddress(mCurrentLocation); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } Step 8: Ma a noi non interessa semplicemente la nostra posizione, ma la città nella quale ci troviamo. Questa informazione la recuperiamo andando a fare un Geocode della Location ritornata dal metodo precedente. Il Geocoder ci fornisce un ArrayList di Address, di possibili indirizzi. Andremo a scegliere il primo che ci viene ritornato. Dall’Address possiamo ottenere diverse informazioni. Per recuperare la città ci basterà invocare il metodo getLocality()Il quale ritornerà una string contenente il nome della città individuata dalla località passata come parametro. Attenzione: Eessendoci possibilità che il Geocoder fallisca è sempre buona norma inserirlo in un costrutto “try-catch” in modo da non incorrere in arresti anomali piuttosto fastidiosi. Giuseppe Cerratti - giuseppe.ciuffo@gmail.com - Giovanni Laquidara - glaquidara@gmail.com GDG L-AB Team
  4. 4. GDG L-Ab for Droidcon Italy 2014 Torino 6-7 Febbraio private void getAddress(Location loc){ Geocoder geo = new Geocoder(getBaseContext(), Locale.getDefault()); String city = null; try { List<Address> addresses = geo.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1); if (addresses.size() > 0) { city = addresses.get(0).getLocality(); teVi_loc.setText("Sei arrivato a: "+city); if (city.equals(teVi_choosedLoc.getText())) { teVi_loc.setText("Sei arrivato a destinazione"); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Giuseppe Cerratti - giuseppe.ciuffo@gmail.com - Giovanni Laquidara - glaquidara@gmail.com GDG L-AB Team

×