API Device Discovery

Quasi ogni esperienza multi-dispositivo inizia con la ricerca dei dispositivi disponibili. A semplificare questa attività comune, offriamo l'API Device Discovery.

Finestra di dialogo con opzioni di condivisione con utenti nelle vicinanze
. Figura 1: condivisione con utenti nelle vicinanze.

Apri la finestra di dialogo di selezione del dispositivo

Il rilevamento dei dispositivi utilizza una finestra di dialogo di sistema per consentire all'utente di selezionare un dispositivo di destinazione. A avvia la finestra di dialogo di selezione del dispositivo, devi prima eseguire un rilevamento e registrare un ricevitore di risultati. Tieni presente che, in modo simile registerForActivityResult, questo destinatario deve essere registrato incondizionatamente come parte del percorso di inizializzazione dell'attività o dei frammenti.

KotlinJava
override fun onCreate(savedInstanceState: Bundle?) {
 
super.onCreate(savedInstanceState)
  devicePickerLauncher
= Discovery.create(this).registerForResult(this, handleDevices)
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
  devicePickerLauncher
= Discovery.create(this).registerForResult(this, handleDevices);
}

Nello snippet di codice riportato sopra, è presente un oggetto handleDevices non definito. Dopo il giorno l'utente sceglie i dispositivi a cui connettersi e, una volta che l'SDK si connette agli altri dispositivi, questo callback riceve l'elenco di Participants selezionato.

KotlinJava
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach {
   
// Use participant info
 
}
}
handleDevices = participants -> {
   
for (Participant participant : participants) {
     
// Use participant info
   
}
}

Dopo aver registrato il selettore del dispositivo, avvialo utilizzando devicePickerLauncher in esecuzione in un'istanza Compute Engine. DevicePickerLauncher.launchDevicePicker richiede due parametri: a elenco di filtri dei dispositivi (vedi la sezione di seguito) e un startComponentRequest. La startComponentRequest viene utilizzato per indicare quale attività deve essere avviata dispositivo ricevente e il motivo della richiesta che viene mostrato all'utente.

KotlinJava
devicePickerLauncher.launchDevicePicker(
  listOf
(),
  startComponentRequest
{
    action
= "com.example.crossdevice.MAIN"
    reason
= "I want to say hello to you"
 
},
)
devicePickerLauncher.launchDevicePickerFuture(
   
Collections.emptyList(),
   
new StartComponentRequest.Builder()
       
.setAction("com.example.crossdevice.MAIN")
       
.setReason("I want to say hello to you")
       
.build());

Accetta richieste di connessione

Quando l'utente seleziona un dispositivo nel selettore, viene visualizzata una finestra di dialogo. dispositivo ricevente per chiedere all'utente di accettare la connessione. Una volta accettato, viene avviata l'attività target, che può essere gestita in onCreate e onNewIntent.

KotlinJava
override fun onCreate(savedInstanceState: Bundle?) {
 
super.onCreate(savedInstanceState)
  handleIntent
(getIntent())
}

override fun onNewIntent(intent: Intent) {
 
super.onNewIntent(intent)
  handleIntent
(intent)
}

private fun handleIntent(intent: Intent) {
 
val participant = Discovery.create(this).getParticipantFromIntent(intent)
 
// Accept connection from participant (see below)
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
 
super.onCreate(savedInstanceState);
  handleIntent
(getIntent());
}

@Override
public void onNewIntent(Intent intent) {
 
super.onNewIntent(intent);
  handleIntent
(intent);
}

private void handleIntent(Intent intent) {
 
Participant participant = Discovery.create(this).getParticipantFromIntent(intent);
 
// Accept connection from participant (see below)
}

Filtri per i dispositivi

Quando si rilevano dispositivi, è normale filtrarli per visualizzare solo mostrare quelle pertinenti al caso d'uso in questione. Ad esempio:

  • Applicazione di filtri in base ai soli dispositivi con fotocamera per facilitare la scansione di un codice QR
  • Possibilità di filtrare per solo le TV per un'esperienza di visione su schermo di casa

Per questa anteprima per gli sviluppatori, inizieremo con la possibilità di filtrare per dispositivi di proprietà dello stesso utente.

Puoi specificare il filtro dei dispositivi utilizzando la classe DeviceFilter:

KotlinJava
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
List<DeviceFilter> deviceFilters =
   
Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));

Dopo aver definito i filtri dei dispositivi, puoi avviare il rilevamento dei dispositivi.

KotlinJava
devicePickerLauncher.launchDevicePicker(deviceFilters, startComponentRequest)
Futures.addCallback(
    devicePickerLauncher
.launchDevicePickerFuture(deviceFilters, startComponentRequest),
   
new FutureCallback<Void>() {
     
@Override
     
public void onSuccess(Void result) {
       
// do nothing, result will be returned to handleDevices callback
     
}

     
@Override
     
public void onFailure(Throwable t) {
       
// handle error
     
}
   
},
    mainExecutor
);

Nota che launchDevicePicker è una funzione asincrona che utilizza suspend parola chiave.