Casi todas las experiencias multidispositivo comienzan con la búsqueda de dispositivos disponibles. Para para simplificar esta tarea común, ofrecemos la API de Device Discovery.
Inicia el diálogo de selección de dispositivos
La detección de dispositivos usa un diálogo del sistema para permitir que el usuario seleccione un dispositivo de destino. Para
inicia el diálogo de selección de dispositivos, primero debes obtener un mensaje de detección
y registra un receptor de resultados. Ten en cuenta que es similar a
registerForActivityResult
, este receptor debe registrarse de forma incondicional como
de la ruta de inicialización de la actividad o el 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); }
En el fragmento de código anterior, tenemos un objeto handleDevices
no definido. Después del
el usuario elige los dispositivos a los que
se conectará y, una vez que el SDK se conecte
se conecta a los otros dispositivos, esta devolución de llamada recibe la lista de Participants
seleccionado.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
Después de registrar el selector de dispositivos, inícialo con el devicePickerLauncher
.
instancia. DevicePickerLauncher.launchDevicePicker
toma dos parámetros: un
lista de filtros de dispositivo (consulta la sección a continuación) y un startComponentRequest
. El
startComponentRequest
se usa para indicar en qué actividad se debe iniciar
el dispositivo receptor y el motivo de la solicitud que se muestra al usuario.
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());
Acepta solicitudes de conexión
Cuando el usuario elige un dispositivo en el selector de dispositivos, aparece un diálogo en la
dispositivo receptor para pedirle al usuario que acepte la conexión. Una vez aceptada,
se inicia la actividad objetivo, que se puede controlar en onCreate
y
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
Al descubrir dispositivos, es común querer filtrarlos para que solo se muestren muestre los relevantes para el caso de uso en cuestión. Por ejemplo:
- Filtra solo los dispositivos con cámara para escanear un código QR
- Filtrado para TV solo para una experiencia de visualización en pantalla grande
En esta versión preliminar para desarrolladores, comenzaremos con la capacidad de filtrar los siguientes elementos: que pertenecen al mismo usuario.
Puedes especificar el filtro de dispositivos usando la clase DeviceFilter
:
Kotlin
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
Java
List<DeviceFilter> deviceFilters = Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
Una vez que definas los filtros de dispositivos, podrás iniciar la detección 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);
Ten en cuenta que launchDevicePicker
es una función asíncrona que usa el
Palabra clave suspend
.