Obtener datos de instantáneas

En esta sección, se muestra cómo usar la API de Snapshot para obtener el estado actual de cada uno de los tipos de contexto admitidos. Para obtener más información, consulta Cómo comenzar. Para obtener detalles sobre los indicadores contextuales obsoletos, abre el siguiente aviso expandible:

Cómo obtener la actividad actual

Para obtener la actividad actual del usuario, llama a getDetectedActivity(), que muestra un ActivityRecognitionResult que contiene información sobre las actividades más recientes del usuario.

El método getDetectedActivity() requiere el permiso com.google.android.gms.permission.ACTIVITY_RECOGNITION. Agrega este permiso a AndroidManifest.xml.

Para obtener la actividad actual del usuario, sigue estos pasos:

  1. Llama a getSnapshotClient() para crear una instancia de SnapshotClient.
  2. Usa addOnSuccessListener para crear un OnSuccessListener que pueda escuchar un DetectedActivityResponse.
  3. Llama a getStatus() para asegurarte de que el resultado sea válido.
  4. Llama a DetectedActivityResponse.getActivityRecognitionResult() para mostrar un ActivityRecognitionResult. Puedes usar esto para obtener muchos aspectos de la actividad actual del usuario. Por ejemplo:

En el siguiente ejemplo de código, se usa getMostProbableActivity() para obtener la actividad detectada más probable y registrar el resultado en la consola:

Awareness.getSnapshotClient(this).getDetectedActivity()
    .addOnSuccessListener(new OnSuccessListener<DetectedActivityResponse>() {
        @Override
        public void onSuccess(DetectedActivityResponse dar) {
            ActivityRecognitionResult arr = dar.getActivityRecognitionResult();
            DetectedActivity probableActivity = arr.getMostProbableActivity();

            int confidence = probableActivity.getConfidence();
            String activityStr = probableActivity.toString();
            mLogFragment.getLogView().println("Activity: " + activityStr
                + ", Confidence: " + confidence + "/100");
        }
    })

Cómo obtener píxeles contadores cercanos

Para obtener información sobre los píxeles contadores cercanos, llama a getBeaconState(). Los datos de los píxeles contadores consisten en el contenido, el tipo y el espacio de nombres de los archivos adjuntos.

El método getBeaconState() requiere el permiso android.permission.ACCESS_FINE_LOCATION. Agrega este permiso a AndroidManifest.xml. Además, debes activar la API de Nearby Messages para tu proyecto de Google Developers Console. Para obtener más información, consulta Registro y claves de API y Comienza a usar.

Para obtener información sobre los píxeles contadores cercanos, sigue estos pasos:

  1. Verifica si el usuario otorgó los permisos necesarios. En el siguiente ejemplo, se verifica si se otorgó el permiso android.permission.ACCESS_FINE_LOCATION. De lo contrario, se le pedirá su consentimiento al usuario.

    if (ContextCompat.checkSelfPermission(
                MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
            );
            return;
        }
    
  2. Define un BeaconState.TypeFilter. De esta manera, se muestran solo los píxeles contadores con archivos adjuntos que están registrados con el espacio de nombres y el tipo especificados. También puedes filtrar según una coincidencia de byte por byte en el contenido del archivo adjunto. En el siguiente ejemplo, se muestra cómo crear un filtro de tipo:

    private static final List<BeaconState.TypeFilter> BEACON_TYPE_FILTERS = Arrays.asList(
            BeaconState.TypeFilter.with(
                "my.beacon.namespace",
                "my-attachment-type"),
            BeaconState.TypeFilter.with(
                "my.other.namespace",
                "my-attachment-type"));
    
  3. Llama a getSnapshotClient.getBeaconState().

  4. Usa addOnSuccessListener para crear un OnSuccessListener que pueda escuchar un BeaconStateResponse.

  5. Llama a getStatus() para asegurarte de que el resultado sea válido.

  6. Llama a BeaconStateResponse.getBeaconState() para que se muestre el estado del píxel contador.

  7. Llama a BeaconState.getBeaconInfo() para obtener un BeaconState.BeaconInfo.

En el siguiente ejemplo, se muestra cómo obtener información de los píxeles contadores:

Awareness.getSnapshotClient(this).getBeaconState(BEACON_TYPE_FILTERS)
    .addOnSuccessListener(new OnSuccessListener<BeaconStateResponse>() {
        @Override
        public void onSuccess(BeaconStateResponse beaconStateResponse) {
            BeaconStateResult beaconStateResult = beaconStateResponse.getBeaconState();
            BeaconState.BeaconInfo beaconInfo = beaconStateResponse.getBeaconInfo();
        }
    })

Cómo obtener el estado de los auriculares

Para detectar si los auriculares están conectados al dispositivo, llama a getHeadphoneState(), que crea un estado de detección HeadphoneStateResponse con OnSuccessListener configurado para detectar. Luego, puedes llamar a getHeadphoneState() para obtener HeadphoneState.

Para obtener el estado actual de los auriculares, sigue estos pasos:

  1. Llama a getSnapshotClient.getHeadphoneState().
  2. Usa addOnSuccessListener para crear un OnSuccessListener que pueda escuchar un HeadphoneStateResponse.
  3. Llama a getStatus() para asegurarte de que el resultado sea válido.
  4. Si se realiza correctamente, llama a HeadphoneStateResponse.getHeadphoneState() para mostrar el estado de los auriculares. Este valor es PLUGGED_IN o UNPLUGGED.

En el siguiente ejemplo de código, se muestra cómo usar getHeadphoneState():

Awareness.getSnapshotClient(this).getHeadphoneState()
    .addOnSuccessListener(new OnSuccessListener<HeadphoneStateResponse>() {
        @Override
        public void onSuccess(HeadphoneStateResponse headphoneStateResponse) {
            HeadphoneState headphoneState = headphoneStateResponse.getHeadphoneState();
            boolean pluggedIn = headphoneState.getState() == HeadphoneState.PLUGGED_IN;
            String stateStr =
                "Headphones are " + (pluggedIn ? "plugged in" : "unplugged");
            mLogFragment.getLogView().println(stateStr);
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, "Could not get headphone state: " + e);
        }
    });

Obtener ubicación

Puedes obtener la ubicación actual del usuario (latitud-longitud) con una llamada a getLocation(), que muestra un LocationResponse. Luego, puedes llamar a LocationResponse.getLocation() para obtener un Location con los datos de ubicación actuales.

El método getLocation() requiere el permiso android.permission.ACCESS_FINE_LOCATION. Agrega este permiso a AndroidManifest.xml.

Para obtener la ubicación actual, sigue estos pasos:

  1. Verifica si el usuario otorgó los permisos necesarios. En el siguiente ejemplo, se verifica si se otorgó el permiso android.permission.ACCESS_FINE_LOCATION. De lo contrario, se le pedirá su consentimiento al usuario.

    
    if (ContextCompat.checkSelfPermission(
                MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
            );
            return;
        }
    
  2. Llama a getSnapshotClient.getLocation().

  3. Usa addOnSuccessListener para crear un OnSuccessListener que pueda escuchar un LocationResponse.

  4. Llama a getStatus() para asegurarte de que el resultado sea válido.

  5. Llama a LocationResponse.getLocation() para mostrar el Location actual.

En el siguiente ejemplo, se muestra cómo obtener la ubicación actual:

Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })