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.
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
.