Comment reconnaître l'activité d'un utilisateur avec la reconnaissance d'activité

Rendre une application sensible au contexte est l’un des meilleurs moyens d’offrir des services utiles à vos utilisateurs. Il existe plusieurs façons de le faire, notamment en construisant des applications utilisant des clôtures géographiques et d'autres services de localisation. Cet article porte sur l'utilisation des services Google Play. Reconnaissance d'activité API pour déterminer si l'utilisateur court, marche, dans un véhicule, fait du vélo ou reste immobile.

Le fait de savoir quelle activité l'utilisateur effectue peut vous permettre de gérer l'expérience de l'application, par exemple en demandant si l'utilisateur commence à faire de l'exercice afin de pouvoir le suivre avec Google Fit, ou en empêchant l'envoi de notifications lorsque l'utilisateur conduit. . Les fichiers sources de ce tutoriel sont disponibles sur GitHub.

1. Configuration du projet

La première chose à faire est de créer une nouvelle application Android. Pour cet exemple d'application, je règle le SDK minimum sur 14 et créé un vide par défaut Activité. Une fois l’application de base créée par Android Studio, ouvrez le build.gradle fichier et importez Play Services (la version 8.4 est la plus récente au moment de la rédaction de cet article) sous le les dépendances nœud.

compiler 'com.google.android.gms: play-services: 8.4.0'

Ensuite, créez une nouvelle classe, nommez-la ActivityRecognizedService, et le faire s'étendre IntentService. Lorsque les services Google Play renvoient l'activité de l'utilisateur, celle-ci sera envoyée à cette adresse. IntentService. Cela vous permettra d’exécuter la logique de votre application en arrière-plan au fil de la journée de l’utilisateur..

La classe publique ActivityRecognizedService étend IntentService public ActivityRecognizedService () super ("ActivityRecognizedService");  public ActivityRecognizedService (Nom de chaîne) super (nom);  @Override protected void onHandleIntent (Intention) 

Pour terminer la configuration, ouvrez AndroidManifest.xml. Vous devez déclarer ActivityRecognizedService et inclure le com.google.android.gms.permission.ACTIVITY_RECOGNITION autorisation pour votre application.

            

Maintenant que vous avez terminé la structure de base de votre application, vous pouvez passer à l'étape suivante de connexion aux services Google Play et de demande de données d'activité..

2. Demande de reconnaissance d'activité

Pour utiliser les services Google Play, vous devez d’abord vous y connecter. Commencez par ouvrir MainActivity.java et mettre en œuvre le ConnectionCallbacks et OnConnectionFailedListener interfaces. Vous devez également créer une variable membre de type GoogleApiClient conserver une référence au client API.

Classe publique MainActivity, AppCompatActivity implémente GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener public GoogleApiClient mApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @Override public void onConnected (ensemble @Nullable Bundle)  @Override public void onConnectionSuspended (int i)  @Override public voidConnectionFailed (@NonNull ConnectionResult connectionResult) 

Après avoir implémenté les interfaces requises pour le GoogleApiClient, vous pouvez initialiser le client et vous connecter aux services Google Play dans onCreate () en demandant au ActivityRecognition.API et associer vos auditeurs à la GoogleApiClient exemple.

@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mApiClient = new GoogleApiClient.Builder (this) .addApi (ActivityRecognition.API) .addConnectionCallbacks (this) .addOnConnectionFailedListener (this) .build (); mApiClient.connect (); 

Une fois la GoogleApiClient l'instance s'est connectée, onConnected () est appelé. Lorsque cela se produit, vous devez créer un En attente d'intention qui va au IntentService vous avez créé précédemment, et passez-le au ActivitéReconnaissanceApi. Vous devez également définir un intervalle pour la fréquence à laquelle l'API doit vérifier l'activité de l'utilisateur. Pour cet exemple d'application, nous utilisons une valeur de 3000, ou trois secondes, bien que dans une application réelle, vous souhaitiez vérifier moins fréquemment pour économiser de l'énergie.

@Override public void onConnected (ensemble @Nullable Bundle) Intent Intent = new Intent (this, ActivityRecognizedService.class); PendingIntent waitingIntent = PendingIntent.getService (this, 0, intention, PendingIntent.FLAG_UPDATE_CURRENT); ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates (mApiClient, 3000, pendingIntent); 

À ce stade, votre application doit essayer de reconnaître l'activité de l'utilisateur toutes les trois secondes et envoyer ces données à ActivityRecognizedService.

3. Reconnaissance des activités de traitement

dans le onHandleIntent () méthode de ActivityRecognizedService, la première chose que vous faites est de valider que le reçu Intention contient des données de reconnaissance d'activité. Si c'est le cas, vous pouvez extraire le ActivitéReconnaissanceRésultat du Intention pour voir quelles activités votre utilisateur pourrait effectuer. Vous pouvez récupérer une liste des activités possibles en appelant getProbableActivities () sur le ActivitéReconnaissanceRésultat objet.

@Override protected void onHandleIntent (Intention Intention) if (ActivityRecognitionResult.hasResult (Intention)) ActivityRecognitionResult result = ActivityRecognitionResult.extractResult (Intent); handleDetectedActivities (result.getProbableActivities ()); 

Pour cet exemple d'application, il vous suffit de consigner chaque activité détectée et d'afficher le degré de confiance des services Google Play que l'utilisateur effectue cette activité en appelant getConfidence () sur un DétectéActivité exemple. Si la confiance est égale ou supérieure à 75, il est prudent de supposer que l'utilisateur est en train d'effectuer cette activité. Pour illustrer cela, vous affichez également une notification lorsque votre application détecte que l'utilisateur marche avec une grande confiance..

private void handleDetectedActivities (Liste probableActivities) pour (activité DetectedActivity: probableActivities) switch (activity.getType ()) case DetectedActivity.IN_VEHICLE: Log.e ("ActivityRecogition", "In Vehicle:" + activity.getConfidence ()); Pause;  case DetectedActivity.ON_BICYCLE: Log.e ("ActivityRecogition", "Sur le vélo:" + activity.getConfidence ()); Pause;  case DetectedActivity.ON_FOOT: Log.e ("ActivityRecogition", "À pied:" + activity.getConfidence ()); Pause;  case DetectedActivity.RUNNING: Log.e ("ActivityRecogition", "En cours d'exécution:" + activity.getConfidence ()); Pause;  case DetectedActivity.STILL: Log.e ("ActivityRecogition", "Still:" + activity.getConfidence ()); Pause;  case DetectedActivity.TILTING: Log.e ("ActivityRecogition", "Tilting:" + activity.getConfidence ()); Pause;  case DetectedActivity.WALKING: Log.e ("ActivityRecogition", "En marche:" + activity.getConfidence ()); if (activity.getConfidence ()> = 75) Générateur NotificationCompat.Builder = new NotificationCompat.Builder (this); builder.setContentText ("Marchez-vous?"); builder.setSmallIcon (R.mipmap.ic_launcher); builder.setContentTitle (getString (R.string.app_name)); NotificationManagerCompat.from (this) .notify (0, builder.build ());  Pause;  case DetectedActivity.UNKNOWN: Log.e ("ActivityRecogition", "Unknown:" + activity.getConfidence ()); Pause; 

Si vous exécutez cette application, lancez une exécution, puis branchez votre périphérique sur votre ordinateur. Un journal semblable à celui-ci devrait s'afficher dans la console de développement..

E / ActivityRecogition: À pied: 92 E / ActivityRecogition: En cours d'exécution: 87 E / ActivityRecogition: À vélo: 8 E / ActivityRecogition: Marche: 5

Si vous vous promenez, vous devriez recevoir une notification vous demandant si vous vous promenez. Si vous avez une application d’exercices, c’est l’opportunité idéale pour fournir à votre utilisateur une action lui permettant de commencer à suivre son exercice..

Conclusion

Les services Google Play facilitent la détermination de l'activité actuelle de l'utilisateur. Cela peut être extrêmement utile pour rendre vos applications sensibles au contexte et utiles pour vos utilisateurs, ce qui est excellent pour toutes les personnes impliquées. Avec seulement quelques lignes de code, vous pouvez aussi rendre vos applications plus intelligentes.