Quasi ogni esperienza multidispositivo inizia con la ricerca dei dispositivi disponibili. Per semplificare questa operazione comune, offriamo l'API Device Discovery.
Avvia 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. Per avviare la finestra di dialogo di selezione del dispositivo, devi prima ottenere un client di rilevamento dei dispositivi e registrare un ricevitore dei risultati. Tieni presente che, come per
registerForActivityResult
, questo ricevitore deve essere registrato incondizionatamente come
parte del percorso di inizializzazione dei frammenti o dell'attività.
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, abbiamo un oggetto handleDevices
non definito. Dopo che l'utente ha scelto i dispositivi a cui connettersi e dopo che l'SDK si è connesso agli altri dispositivi, questo callback riceve l'elenco dei Participants
selezionati.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
Dopo aver registrato il selettore dispositivo, avvialo utilizzando l'istanza devicePickerLauncher
. DevicePickerLauncher.launchDevicePicker
utilizza due parametri: un
elenco di filtri per dispositivo (vedi la sezione di seguito) e un startComponentRequest
. startComponentRequest
viene utilizzato per indicare quale attività deve essere avviata sul dispositivo ricevente e il motivo della richiesta mostrata 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 le richieste di connessione
Quando l'utente seleziona un dispositivo nel selettore del dispositivo, sul dispositivo ricevente viene visualizzata una finestra di dialogo per chiedergli di accettare la connessione. Una volta accettata, 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 dispositivo
Durante la scoperta dei dispositivi, è comune filtrare questi dispositivi in modo da mostrare solo quelli pertinenti al caso d'uso in questione. Ecco alcuni esempi:
- Applicazione di filtri solo ai dispositivi con fotocamera per facilitare la scansione di un codice QR
- Applicazione di filtri solo alle TV per un'esperienza di visualizzazione sullo schermo di casa
Per questa anteprima per sviluppatori, inizieremo con la possibilità di filtrare in base ai 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 la parola chiave suspend
.