API Device discovery

Presque toutes les expériences multi-appareils commencent par la recherche d'appareils disponibles. À pour simplifier cette tâche courante, nous proposons l'API Device Discovery.

<ph type="x-smartling-placeholder">
</ph> Boîte de dialogue des options de partage avec les utilisateurs à proximité <ph type="x-smartling-placeholder">
</ph> Figure 1: Partage avec des utilisateurs à proximité

Lancer la boîte de dialogue de sélection des appareils

La détection d'appareils utilise une boîte de dialogue système permettant à l'utilisateur de sélectionner un appareil cible. À la boîte de dialogue de sélection de l'appareil, vous devez d'abord obtenir la détection d'appareils et enregistrer un récepteur de résultats. Notez que, comme registerForActivityResult, ce récepteur doit être enregistré sans condition en tant que du chemin d'initialisation de l'activité ou du fragment.

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);
}

Dans l'extrait de code ci-dessus, nous avons un objet handleDevices non défini. Après l'utilisateur choisit les appareils auxquels se connecter. Une fois que le SDK se connecte aux autres appareils, ce rappel reçoit la liste des Participants sélectionnée.

Kotlin

handleDevices = OnDevicePickerResultListener { participants -> participants.forEach {
    // Use participant info
  }
}

Java

handleDevices = participants -> {
   for (Participant participant : participants) {
      // Use participant info
   }
}

Une fois le sélecteur d'appareil enregistré, lancez-le à l'aide de devicePickerLauncher Compute Engine. DevicePickerLauncher.launchDevicePicker accepte deux paramètres : une liste de filtres d'appareils (voir la section ci-dessous) et un startComponentRequest. La startComponentRequest permet d'indiquer quelle activité doit être démarrée. l'appareil récepteur et la raison de la demande qui est présentée à l'utilisateur.

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());

Accepter les demandes de connexion

Lorsque l'utilisateur sélectionne un appareil dans l'outil de sélection, une boîte de dialogue s'affiche le destinataire pour demander à l'utilisateur d'accepter la connexion. Une fois qu'elles ont été acceptées, les activité cible est lancée, ce qui peut être géré dans onCreate et 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)
}

Filtres d'appareil

Lors de la découverte d'appareils, il est courant de vouloir les filtrer pour n'afficher montrer celles qui sont pertinentes pour le cas d'utilisation concerné. Exemple :

  • Filtrer pour n'afficher que les appareils équipés d'un appareil photo pour faciliter la lecture d'un code QR
  • Filtrer sur les téléviseurs uniquement pour une expérience de visionnage sur grand écran

Dans cet aperçu pour les développeurs, nous commençons par la possibilité de filtrer appareils appartenant au même utilisateur.

Vous pouvez spécifier le filtre d'appareil à l'aide de la classe DeviceFilter:

Kotlin

val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))

Java

List<DeviceFilter> deviceFilters =
    Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));

Une fois les filtres d'appareils définis, vous pouvez lancer la détection d'appareils.

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);

Notez que launchDevicePicker est une fonction asynchrone qui utilise la méthode Mot clé suspend.