Droidcon Italy 2014 on Train - Codelab step
Upcoming SlideShare
Loading in...5
×
 

Droidcon Italy 2014 on Train - Codelab step

on

  • 535 views

Step of Codelab about Activity Recognition from Droidcon Italy 2014.

Step of Codelab about Activity Recognition from Droidcon Italy 2014.

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

Statistics

Views

Total Views
535
Views on SlideShare
535
Embed Views
0

Actions

Likes
1
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Droidcon Italy 2014 on Train - Codelab step Droidcon Italy 2014 on Train - Codelab step Document Transcript

  • 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
  • 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
  • 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
  • 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