Cómo reconocer la actividad del usuario con el reconocimiento de la actividad

Hacer que una aplicación tenga en cuenta el contexto es una de las mejores maneras de ofrecer servicios útiles a sus usuarios. Hay varias formas de hacerlo, incluida la creación de aplicaciones que utilizan geofences y otros servicios de ubicación. Este artículo se centra en el uso de los servicios de Google Play. Reconocimiento de actividad API para determinar si el usuario está corriendo, caminando, en un vehículo, montando bicicleta o si permanece inmóvil.

Saber qué actividad está realizando el usuario puede permitirle atender la experiencia de la aplicación, por ejemplo, preguntando si el usuario está comenzando a ejercitarse para poder realizar un seguimiento de ella con Google Fit, o evitar que se envíen notificaciones cuando el usuario está conduciendo. . Los archivos de origen de este tutorial se pueden encontrar en GitHub.

1. Configuración del proyecto

Lo primero que debes hacer es crear una nueva aplicación para Android. Para esta aplicación de ejemplo, establezco el SDK mínimo en 14 y creó un vacío por defecto Actividad. Una vez que Android Studio haya creado la aplicación base, abra el construir.gradle archivo, e importe Play Services (la versión 8.4 es la más reciente en el momento de escribir este documento) bajo el dependencias nodo.

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

A continuación, crea una nueva clase, nombrala ActividadReconocidoServicio, y que se extienda Servicio de Intención. Cuando Google Play Services devuelva la actividad del usuario, se enviará a este Servicio de Intención. Esto le permitirá realizar la lógica de la aplicación en segundo plano a medida que el usuario avanza su día..

La clase pública ActivityRecognizedService extiende IntentService public ActivityRecognizedService () super ("ActivityRecognizedService");  public ActivityRecognizedService (String name) super (name);  @ Anular anulación protegida enHandleIntent (Intención de intención) 

Para finalizar la configuración, abre. AndroidManifest.xml. Necesitas declarar ActividadReconocidoServicio e incluir el com.google.android.gms.permission.ACTIVITY_RECOGNITION permiso para su aplicación.

            

Ahora que ha completado la estructura base de su aplicación, puede pasar al siguiente paso de conectarse a Google Play Services y solicitar datos de actividad..

2. Solicitud de reconocimiento de actividad

Para utilizar los servicios de Google Play, primero debe conectarse a ellos. Comience abriendo MainActivity.java e implementar el ConnectionCallbacksOnConnectionFailedListener interfaces También es necesario crear una variable miembro de tipo GoogleApiClient para mantener una referencia al cliente API.

la clase pública MainActivity extiende AppCompatActivity implementa GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener public GoogleApiClient mApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);  @ Anular el vacío público onConnected (@Nullable Bundle bundle)  @Override public void onConnectionSuspended (int i)  @Override public void onConnectionFailed (@NonNull ConnectionResult connectionResult connection 

Después de implementar las interfaces requeridas para el GoogleApiClient, puede inicializar el cliente y conectarse a Google Play Services en onCreate () solicitando el ActivityRecognition.API y asociando a sus oyentes con el GoogleApiClient ejemplo.

@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 (); 

Una vez el GoogleApiClient instancia ha conectado, onConnected () se llama. Cuando esto sucede, necesitas crear un PendingIntent que va a la Servicio de Intención Usted creó anteriormente, y lo pasa a la ActividadReconocimientoApi. También debe establecer un intervalo para la frecuencia con la que la API debe verificar la actividad del usuario. Para esta aplicación de ejemplo, usamos un valor de 3000, o tres segundos, aunque en una aplicación real es posible que desee revisar con menos frecuencia para ahorrar energía.

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

En este punto, su aplicación debe intentar reconocer la actividad del usuario cada tres segundos y enviar esa información a ActividadReconocidoServicio.

3. Reconocimiento de la actividad de manipulación.

En el onHandleIntent () método de ActividadReconocidoServicio, Lo primero que debes hacer es validar que lo recibido. Intención Contiene datos de reconocimiento de actividad. Si lo hace, entonces puede extraer el ActividadReconocimientoResultar desde el Intención para ver qué actividades podría estar realizando su usuario. Puede recuperar una lista de las posibles actividades llamando getProbableActivities () sobre el ActividadReconocimientoResultar objeto.

@Override protected void onHandleIntent (Intención) if (ActivityRecognitionResult.hasResult (intent)) ActivityRecognitionResult result = ActivityRecognitionResult.extractResult (intent); handleDetectedActivities (result.getProbableActivities ()); 

Para esta aplicación de muestra, simplemente registre cada actividad detectada y muestre qué tan confiado es el servicio de Google Play que el usuario está realizando esa actividad llamando getConfidence () en un DetectActividad ejemplo. Si la confianza es de 75 o más, es seguro asumir que el usuario está realizando esa actividad. Para demostrar esto, también muestra una notificación cuando su aplicación detecta que el usuario está caminando con confianza..

void privado handleDetectedActivities (Lista ProbableActivities) for (actividad DetectedActivity: probableActivities) switch (activity.getType ()) case DetectedActivity.IN_VEHICLE: Log.e ("ActivityRecogition", "In Vehicle:" + activity.getConfidence ()); descanso;  case DetectedActivity.ON_BICYCLE: Log.e ("ActivityRecogition", "On Bicycle:" + activity.getConfidence ()); descanso;  case DetectedActivity.ON_FOOT: Log.e ("ActivityRecogition", "On Foot:" + activity.getConfidence ()); descanso;  case DetectedActivity.RUNNING: Log.e ("ActivityRecogition", "Running:" + activity.getConfidence ()); descanso;  case DetectedActivity.STILL: Log.e ("ActivityRecogition", "Still:" + activity.getConfidence ()); descanso;  caso DetectedActivity.TILTING: Log.e ("ActivityRecogition", "Tilting:" + activity.getConfidence ()); descanso;  case DetectedActivity.WALKING: Log.e ("ActivityRecogition", "Walking:" + activity.getConfidence ()); if (activity.getConfidence ()> = 75) Constructor NotificationCompat.Builder = NotificationCompat.Builder nuevo (esto); builder.setContentText ("¿Estás caminando?"); builder.setSmallIcon (R.mipmap.ic_launcher); builder.setContentTitle (getString (R.string.app_name)); NotificationManagerCompat.from (this) .notify (0, builder.build ());  rotura;  caso DetectedActivity.UNKNOWN: Log.e ("ActivityRecogition", "Unknown:" + activity.getConfidence ()); descanso; 

Si ejecuta esta aplicación, vaya a correr y luego conecte su dispositivo a su computadora, debería ver un registro similar al siguiente en su consola de desarrollo.

E / ActivityRecogition: On Foot: 92 E / ActivityRecogition: Running: 87 E / ActivityRecogition: En bicicleta: 8 E / ActivityRecogition: Walking: 5

Si sale a caminar, debe recibir una notificación preguntando si está dando un paseo. Si tiene una aplicación de ejercicio, esta sería la oportunidad perfecta para brindarle a su usuario una acción que le permita comenzar a realizar un seguimiento de su ejercicio..

Conclusión

Google Play Services hace que sea muy fácil determinar la actividad actual del usuario. Esto puede ser increíblemente valioso para hacer que sus aplicaciones sean conscientes del contexto y útiles para sus usuarios, lo que es ideal para todos los involucrados. Con solo unas pocas líneas de código, usted también puede hacer que sus aplicaciones sean más inteligentes.