Questa sezione mostra come utilizzare l'API Snapshot per ottenere lo stato attuale di ciascuno dei tipi di contesto supportati. Per saperne di più, consulta la pagina Guida introduttiva. Per i dettagli sui segnali contestuali ritirati, apri il seguente avviso espandibile:
Ottenere l'attività attuale
Per ottenere l'attività attuale dell'utente, chiama getDetectedActivity(), che restituisce un ActivityRecognitionResult
contenente informazioni sulle attività più recenti dell'utente.
Il metodo getDetectedActivity() richiede l'autorizzazione
com.google.android.gms.permission.ACTIVITY_RECOGNITION. Aggiungi questa
autorizzazione a AndroidManifest.xml.
Per ottenere l'attività attuale dell'utente:
- Chiama
getSnapshotClient()per creare un'istanza diSnapshotClient. - Utilizza
addOnSuccessListenerper creare unOnSuccessListenerin grado di rimanere in ascolto per unDetectedActivityResponse. - Chiama
getStatus()per assicurarti che il risultato sia valido. Chiama
DetectedActivityResponse.getActivityRecognitionResult()per restituire unActivityRecognitionResult. Puoi utilizzarlo per ottenere molti aspetti dell'attività attuale dell'utente. Ad esempio:- Chiama
getMostProbableActivity()per ottenere solo l'attività più probabile. - Chiama
getProbableActivities()per ottenere un elenco delle attività recenti classificate in base alla probabilità. - Chiama
getActivityConfidence()per restituire il valore di affidabilità per un determinato tipo di attività. - Chiama
hasResult()per rilevare se unIntentcontiene unActivityRecognitionResult.
- Chiama
Il seguente esempio di codice utilizza getMostProbableActivity()
per ottenere l'attività rilevata più probabile e per registrare il risultato nella
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");
}
})
Ottenere i beacon nelle vicinanze
Per ottenere informazioni sui beacon nelle vicinanze, chiama getBeaconState().
I dati dei beacon sono costituiti da contenuti, tipo e spazio dei nomi di eventuali allegati.
Il metodo getBeaconState() richiede l'autorizzazione android.permission.ACCESS_FINE_LOCATION. Aggiungi questa autorizzazione a AndroidManifest.xml.
Inoltre, devi attivare l'API Nearby Messages per il tuo progetto Google Developers Console. Per saperne di più, consulta le pagine Registrazione e chiavi API
e Guida introduttiva.
Per ottenere informazioni sui beacon nelle vicinanze:
Verifica se l'utente ha concesso le autorizzazioni richieste. Il seguente esempio verifica se è stata concessa l'autorizzazione
android.permission.ACCESS_FINE_LOCATION. In caso contrario, all'utente viene chiesto il consenso.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; }Definisci un
BeaconState.TypeFilter. In questo modo vengono restituiti solo i beacon con allegati registrati con il tipo e lo spazio dei nomi specificati. Puoi anche filtrare in base a una corrispondenza byte per byte sul contenuto dell'allegato. Il seguente esempio mostra come creare un filtro di 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"));Utilizza
addOnSuccessListenerper creare unOnSuccessListenerin grado di rimanere in ascolto per unBeaconStateResponse.Chiama
getStatus()per assicurarti che il risultato sia valido.Chiama
BeaconStateResponse.getBeaconState()per restituire lo stato del beacon.Chiama
BeaconState.getBeaconInfo()per ottenere unBeaconState.BeaconInfo.
Il seguente esempio mostra come ottenere le informazioni sui beacon:
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();
}
})
Ottenere lo stato delle cuffie
Per rilevare se le cuffie sono collegate al dispositivo, chiama getHeadphoneState(),
che crea un HeadphoneStateResponse
con lo stato di rilevamento impostato su OnSuccessListener per il rilevamento.
Poi puoi chiamare getHeadphoneState() per ottenere HeadphoneState.
Per ottenere lo stato attuale delle cuffie, procedi come segue:
- Chiama
getSnapshotClient.getHeadphoneState(). - Utilizza
addOnSuccessListenerper creare unOnSuccessListenerin grado di rimanere in ascolto per unHeadphoneStateResponse. - Chiama
getStatus()per assicurarti che il risultato sia valido. - Se l'operazione ha esito positivo, chiama
HeadphoneStateResponse.getHeadphoneState()per restituire lo stato delle cuffie. Questo valore èPLUGGED_INoUNPLUGGED.
Il seguente esempio di codice mostra come utilizzare 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);
}
});
Ottenere la località
Puoi ottenere la posizione attuale dell'utente (latitudine-longitudine) con una chiamata a getLocation(), che restituisce un LocationResponse.
Poi puoi chiamare LocationResponse.getLocation()
per ottenere un Location
con i dati sulla posizione attuale.
Il getLocation() metodo richiede l'
android.permission.ACCESS_FINE_LOCATION autorizzazione. Aggiungi questa autorizzazione a
AndroidManifest.xml.
Per ottenere la posizione attuale, eseguire i seguenti passaggi:
Verifica se l'utente ha concesso le autorizzazioni richieste. Il seguente esempio verifica se è stata concessa l'autorizzazione
android.permission.ACCESS_FINE_LOCATION. In caso contrario, all'utente viene chiesto il consenso.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; }Chiama
getSnapshotClient.getLocation().Utilizza
addOnSuccessListenerper creare unOnSuccessListenerin grado di rimanere in ascolto per unLocationResponse.Chiama
getStatus()per assicurarti che il risultato sia valido.Chiama
LocationResponse.getLocation()per restituire l'attualeLocation.
Il seguente esempio mostra come ottenere la posizione attuale:
Awareness.getSnapshotClient(this).getLocation()
.addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
@Override
public void onSuccess(LocationResponse locationResponse) {
Location loc = locationResponse.getLocationResult();
}
})