Receber dados de snapshots

Nesta seção, mostramos como usar a API Snapshot para ver o estado atual de cada um dos tipos de contexto compatíveis. Para mais informações, consulte Primeiros passos. Para detalhes sobre sinais de contexto obsoletos, abra o seguinte aviso expansível:

Ver a atividade atual

Para acessar a atividade atual do usuário, chame getDetectedActivity(), que retorna um ActivityRecognitionResult que contém informações sobre as atividades mais recentes do usuário.

O método getDetectedActivity() requer a permissão com.google.android.gms.permission.ACTIVITY_RECOGNITION. Adicione essa permissão a AndroidManifest.xml.

Para obter a atividade atual do usuário, execute as seguintes etapas:

  1. Chame getSnapshotClient() para criar uma instância de SnapshotClient.
  2. Use addOnSuccessListener para criar um OnSuccessListener que possa detectar um DetectedActivityResponse.
  3. Chame getStatus() para garantir que o resultado seja válido.
  4. Chame DetectedActivityResponse.getActivityRecognitionResult() para retornar um ActivityRecognitionResult. Você pode usar isso para obter muitos aspectos da atividade atual do usuário. Exemplo:

O exemplo de código a seguir usa getMostProbableActivity() para receber a atividade detectada mais provável e registrar o resultado no console:

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");
        }
    })

Ver sensores nas proximidades

Para mais informações sobre beacons próximos, chame getBeaconState(). Os dados de beacon consistem no conteúdo, tipo e namespace de quaisquer anexos.

O método getBeaconState() requer a permissão android.permission.ACCESS_FINE_LOCATION. Adicione essa permissão a AndroidManifest.xml. Além disso, ative a API Nearby Messages no projeto do Google Developers Console. Para mais informações, consulte Inscrição e chaves de API e Primeiros passos.

Para obter informações sobre beacons próximos, siga estas etapas:

  1. Verifique se o usuário concedeu as permissões necessárias. O exemplo a seguir verifica se a permissão android.permission.ACCESS_FINE_LOCATION foi concedida. Caso contrário, será solicitado o consentimento.

    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. Defina um BeaconState.TypeFilter. Isso retorna apenas beacons com anexos registrados com o namespace e o tipo especificados. Também é possível filtrar com base em uma correspondência de byte por byte no conteúdo do anexo. O exemplo a seguir mostra como criar um filtro de tipo:

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

  4. Use addOnSuccessListener para criar um OnSuccessListener que possa detectar um BeaconStateResponse.

  5. Chame getStatus() para garantir que o resultado seja válido.

  6. Chame BeaconStateResponse.getBeaconState() para retornar o estado do beacon.

  7. Chame BeaconState.getBeaconInfo() para receber um BeaconState.BeaconInfo.

O exemplo a seguir mostra como obter informações do sensor:

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

Estado do fone de ouvido

Para detectar se os fones de ouvido estão conectados ao dispositivo, chame getHeadphoneState(), que cria um estado de detecção HeadphoneStateResponse com OnSuccessListener definido para detectar. Em seguida, você pode chamar getHeadphoneState() para ver o HeadphoneState.

Para ver o estado atual do fone de ouvido, siga estas etapas:

  1. Chame getSnapshotClient.getHeadphoneState().
  2. Use addOnSuccessListener para criar um OnSuccessListener que possa detectar um HeadphoneStateResponse.
  3. Chame getStatus() para garantir que o resultado seja válido.
  4. Em caso de êxito, chame HeadphoneStateResponse.getHeadphoneState() para retornar o estado do fone de ouvido. Esse valor é PLUGGED_IN ou UNPLUGGED.

O exemplo de código a seguir mostra como 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);
        }
    });

Acessar local

É possível receber o local atual do usuário (latitude-longitude) com uma chamada para getLocation(), que retorna um LocationResponse. Em seguida, você pode chamar LocationResponse.getLocation() para ver um Location com os dados de local atuais.

O método getLocation() requer a permissão android.permission.ACCESS_FINE_LOCATION. Adicione essa permissão a AndroidManifest.xml.

Para ver o local atual, siga estas etapas:

  1. Verifique se o usuário concedeu as permissões necessárias. O exemplo a seguir verifica se a permissão android.permission.ACCESS_FINE_LOCATION foi concedida. Caso contrário, será solicitado o consentimento.

    
    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. Chame getSnapshotClient.getLocation().

  3. Use addOnSuccessListener para criar um OnSuccessListener que possa detectar um LocationResponse.

  4. Chame getStatus() para garantir que o resultado seja válido.

  5. Chame LocationResponse.getLocation() para retornar o Location atual.

O exemplo a seguir mostra como obter o local atual:

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