Quasi ogni esperienza multi-dispositivo inizia con la ricerca dei dispositivi disponibili. A semplificare questa attività comune, offriamo l'API Device Discovery.
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.