Quase todas as experiências com vários dispositivos começam com a descoberta 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 dispositivo, primeiro você precisa fazer uma descoberta de dispositivo
cliente e registrar um receptor de resultado. Semelhante a
registerForActivityResult
, este receptor precisa ser registrado incondicionalmente como
parte da atividade ou do caminho de inicialização do fragmento.
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);
}
No snippet de código acima, temos um objeto handleDevices
indefinido. Depois
o usuário escolhe os dispositivos para se conectar e, depois que o SDK
se conectar a outros dispositivos, esse callback receberá a lista de Participants
selecionados.
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach {
// Use participant info
}
}
handleDevices = participants -> {
for (Participant participant : participants) {
// Use participant info
}
}
Depois que o seletor de dispositivo for registrado, inicie-o usando o devicePickerLauncher
.
instância. DevicePickerLauncher.launchDevicePicker
usa dois parâmetros: um
lista de filtros de dispositivo (consulte a seção abaixo) e um startComponentRequest
. A
startComponentRequest
é usado para indicar qual atividade deve ser iniciada
o dispositivo receptor e o motivo da solicitação mostrado ao usuário.
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());
Aceitar solicitações de conexão
Quando o usuário seleciona um dispositivo no seletor, uma caixa de diálogo é exibida no
do dispositivo receptor para que o usuário aceite a conexão. Depois de aceita, a
a atividade de destino é iniciada, o que pode ser processado em onCreate
e
onNewIntent
.
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)
}
Filtros de dispositivo
Ao descobrir dispositivos, é comum querer filtrá-los para e mostrar os que são relevantes para o caso de uso em questão. Exemplo:
- Filtrar apenas dispositivos com câmera para facilitar a leitura do QR code
- Filtrar para apenas TVs para uma experiência de exibição em tela grande
Para esta prévia para desenvolvedores, estamos começando com a capacidade de filtrar para dispositivos que pertencem ao mesmo usuário.
É possível especificar o filtro de dispositivo usando a classe DeviceFilter
:
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
List<DeviceFilter> deviceFilters =
Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
Depois de definir os filtros de dispositivo, você pode iniciar a descoberta de dispositivos.
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);
Observe que launchDevicePicker
é uma função assíncrona que usa o
suspend
palavra-chave.