Quase todas as experiências com vários dispositivos começam com a localização dos dispositivos disponíveis. Para simplificar essa tarefa comum, oferecemos a API Device Discovery.
Abrir a caixa de diálogo de seleção de dispositivo
A descoberta de dispositivos usa uma caixa de diálogo do sistema para permitir que o usuário selecione um dispositivo de destino. Para
iniciar a caixa de diálogo de seleção de dispositivos, primeiro você precisa conseguir um cliente de descoberta
de dispositivos e registrar um receptor de resultados. Observe que, semelhante a
registerForActivityResult
, esse receptor precisa ser registrado incondicionalmente como
parte do caminho de inicialização da atividade ou do fragmento.
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); }
No snippet de código acima, temos um objeto handleDevices
indefinido. Depois
que o usuário escolhe os dispositivos para se conectar e o SDK se conecta
aos outros dispositivos, esse callback recebe a lista de Participants
selecionados.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
Depois que o seletor de dispositivo for registrado, inicie-o usando a instância
devicePickerLauncher
. O DevicePickerLauncher.launchDevicePicker
usa dois parâmetros: uma
lista de filtros de dispositivo (consulte a seção abaixo) e um startComponentRequest
. O
startComponentRequest
é usado para indicar qual atividade vai ser iniciada no
dispositivo receptor e o motivo da solicitação que é mostrado ao usuário.
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());
Aceitar solicitações de conexão
Quando o usuário seleciona um dispositivo no seletor, uma caixa de diálogo é exibida no
dispositivo de recebimento para solicitar que o usuário aceite a conexão. Depois de aceita, a
atividade de destino é iniciada, o que pode ser processada em 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) }
Filtros de dispositivos
Ao descobrir dispositivos, é comum filtrá-los para mostrar apenas os relevantes para o caso de uso em questão. Por exemplo:
- Filtrar apenas dispositivos com câmera para ajudar a ler um código QR
- Filtrar apenas para TVs para uma experiência de visualização em tela grande
Nesta prévia para desenvolvedores, estamos começando com a capacidade de filtrar dispositivos do mesmo usuário.
É possível especificar o filtro de dispositivo usando a classe DeviceFilter
:
Kotlin
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
Java
List<DeviceFilter> deviceFilters = Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
Depois de definir os filtros, você pode iniciar a descoberta de dispositivos.
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);
Observe que launchDevicePicker
é uma função assíncrona que usa a palavra-chave suspend
.