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.
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..
Para utilizar los servicios de Google Play, primero debe conectarse a ellos. Comience abriendo MainActivity.java e implementar el ConnectionCallbacks
y OnConnectionFailedListener
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
.
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 (ListaProbableActivities) 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..
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.