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.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  devicePickerLauncher = Discovery.create(this).registerForResult(this, handleDevices)
}

Java

@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.

Kotlin

handleDevices = OnDevicePickerResultListener { participants -> participants.forEach {
    // Use participant info
  }
}

Java

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.

Kotlin

devicePickerLauncher.launchDevicePicker(
  listOf(),
  startComponentRequest {
    action = "com.example.crossdevice.MAIN"
    reason = "I want to say hello to you"
  },
)

Java

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.

Kotlin

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

Java

@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:

Kotlin

val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))

Java

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

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

Kotlin

devicePickerLauncher.launchDevicePicker(deviceFilters, startComponentRequest)

Java

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.