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:
- Chame
getSnapshotClient()
para criar uma instância deSnapshotClient
. - Use
addOnSuccessListener
para criar umOnSuccessListener
que possa detectar umDetectedActivityResponse
. - Chame
getStatus()
para garantir que o resultado seja válido. Chame
DetectedActivityResponse.getActivityRecognitionResult()
para retornar umActivityRecognitionResult
. Você pode usar isso para obter muitos aspectos da atividade atual do usuário. Exemplo:- Chame
getMostProbableActivity()
para ver apenas a atividade mais provável. - Chame
getProbableActivities()
para ver uma lista das atividades recentes classificadas por probabilidade. - Chame
getActivityConfidence()
para retornar o valor de confiança de um determinado tipo de atividade. - Chame
hasResult()
para detectar se umIntent
contém umActivityRecognitionResult
.
- Chame
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:
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; }
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")); Use
addOnSuccessListener
para criar umOnSuccessListener
que possa detectar umBeaconStateResponse
.Chame
getStatus()
para garantir que o resultado seja válido.Chame
BeaconStateResponse.getBeaconState()
para retornar o estado do beacon.Chame
BeaconState.getBeaconInfo()
para receber umBeaconState.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:
- Chame
getSnapshotClient.getHeadphoneState()
. - Use
addOnSuccessListener
para criar umOnSuccessListener
que possa detectar umHeadphoneStateResponse
. - Chame
getStatus()
para garantir que o resultado seja válido. - Em caso de êxito, chame
HeadphoneStateResponse.getHeadphoneState()
para retornar o estado do fone de ouvido. Esse valor éPLUGGED_IN
ouUNPLUGGED
.
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:
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; }
Use
addOnSuccessListener
para criar umOnSuccessListener
que possa detectar umLocationResponse
.Chame
getStatus()
para garantir que o resultado seja válido.Chame
LocationResponse.getLocation()
para retornar oLocation
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();
}
})