API de detección de dispositivos

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.

Cuadro de diálogo con opciones para compartir con usuarios cercanos
Figura 1: Compartir con usuarios cercanos

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.