Riconoscere i movimenti di un utente in Android

Il riconoscimento delle attività consente di creare applicazioni dinamiche in grado di rilevare le attività svolta dagli utenti con i dispositivi Android

L’Activity Recognition consente di rilevare costantemente i movimenti che un utente sta effettuando con il proprio dispositivo Android, ad esempio è in grado di rilevare se l’utente sta correndo, se sta andando in bicicletta, se si trova in un’automobile, ecc. Messo a disposizione dai Google Play Services, il riconoscimento delle attività consente di creare applicazioni dinamica sfruttando i movimenti degli utenti. Per poter utilizzare questa funzionalità occorre il consenso all’utente nel manifesto dell’applicazione tramite il permesso:

  com.google.android.gms.permission.ACTIVITY_RECOGNITION)

Android Activity Recognition

Per poter ricevere costantemente aggiornamenti sull’attività svolta dall’utente bisogna utilizzare il metodo requestActivityUpdates() che analizza una serie di sensori come l’accelerometro a basso consumo energetico. Con l’implementazione di questa funzionalità, tramite il metodo getProbableActivities(), ad intervalli regolari la nostra applicazione riceverà un oggetto di tipo ActivityRecognitionResult che contiene un elenco di tutte le attività e la probabilità che l’utente stia effettuando quel tipo di attività in quel determinato momento. Queste informazioni vengono restituite tramite un oggetto di tipo DetectedActivity che contiene l’attività rilevata e la relativa percentuale.

E’ possibile richiedere al dispositivo solo l’attività più probabile che l’utente sta svolgendo in quel momento tramite il metodo getMostProbableActivity() che restituisce l’attività con la precisione più alta.

Nella tabella seguente sono riportati tutti i possibili risultati di una DetectedActivity.

Costante Descrizione
IN_VEHICLE Il dispositivo è in un veicolo, ad es. un’automobile.
ON_BICYCLE Il dispositivo è su una bicicletta.
ON_FOOT Il dispositivo è su un utente che camminando o correndo.
RUNNING Il dispositivo è su un utente che sta correndo.
STILL Il dispositivo è fermo.
TILTING L’angolo relativo alla gravità cambia rapidamente.
UNKNOWN Impossibile rilevare l’attività corrente.
WALKING Il dispositivo è su un utente che sta camminando.

Alcune attività hanno una gerarchia, ad esempio l’attività di tipo ON_FOOT è una generalizzazione delle attività WALKING e RUNNING.

La precisione o confidenza di un’attività si ottiene con il metodo getConfidence() che ritorna un valore compreso tra 0 e 100. Maggiore sarà il valore, maggiore sarà la probabilità di essere riusciti a rilevare correttamente l’attività svolta dall’utente. In generale, un valore superiore a 75 indica che con molta probabilità l’attività rilevata è corretta.

Ecco un esempio in cui viene settato l’oggetto GoogleApiClient per l’Activty Recognition in Android.

  GoogleApiClient googleApiClient =
    new GoogleApiClient
      .Builer(getContext())
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(LocationServices.API)
        .addApi(ActivityRecognition.API)
        .build();
  setGoogleApiClient(googleApiClient);

Per settare l’oggetto ActivityRecognition si indica l’intervallo di tempo con cui devono essere effettuate le rilevazioni:

  private static final int ACTIVITY_DETECTION_INTERVAL = 3000;

  ActivityRecognition
.ActivityRecognitionApi

    .requestActivityUpdates(

      getGoogleApiClient(),

      ACTIVITY_DETECTION_INTERVAL,

      getActivityDetectionPendingIntent()

    ).setResultCallback(this);

Per verificare, ad esempio, se un utente sta camminando o correndo andremo a confrontare i dati contenuti nelle DetectedActivity:

  int detectedActivitiesCount = detectedActivities.size();

  for (DetectedActivity detectedActivity : detectedActivities) {
    if (
      detectedActivity.getType() == DetectedActivity.ON_FOOT ||
      detectedActivity.getType() == DetectedActivity.WALKING ||
      detectedActivity.getType() == DetectedActivity.RUNNING ||
      detectedActivity.getType() == DetectedActivity.STILL) {
      
      // ...
    }
  }

Per approfondire Android ecco la guida completa completa: Guida Android.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *