Device Discovery API

Fast jede Multiscreen-Erfahrung beginnt damit, verfügbare Geräte zu finden. Bis um diese gängige Aufgabe zu vereinfachen, bieten wir die Device Discovery API.

<ph type="x-smartling-placeholder">
</ph> Dialogfeld mit Freigabeoptionen für Nutzer in der Nähe <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Mit Nutzern in der Nähe teilen.

Dialogfeld für die Geräteauswahl öffnen

Bei der Geräteerkennung wird ein Systemdialog verwendet, über den der Nutzer ein Zielgerät auswählen kann. Bis Dialog zur Geräteauswahl initiieren, müssen Sie zuerst eine Geräteerkennung erhalten und einen Ergebnisempfänger registrieren. Ähnlich wie bei registerForActivityResult, dieser Empfänger muss unbedingt als des Aktivitäts- oder Fragmentinitialisierungspfads.

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

Das obige Code-Snippet enthält ein nicht definiertes handleDevices-Objekt. Nachher Der Nutzer wählt die Geräte aus, mit denen eine Verbindung hergestellt werden soll, und sobald das SDK erfolgreich ist sich mit den anderen Geräten verbindet, empfängt dieser Callback die Liste Participants ausgewählt.

Kotlin

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

Java

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

Nachdem die Geräteauswahl registriert wurde, starte sie mit dem devicePickerLauncher Instanz. DevicePickerLauncher.launchDevicePicker verwendet zwei Parameter: einen Liste der Gerätefilter (siehe Abschnitt unten) und ein startComponentRequest. Die Mit startComponentRequest wird angegeben, an welcher Aktivität gestartet werden soll das empfangende Gerät und den Grund für die Anfrage, die der Nutzer sieht.

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

Verbindungsanfragen akzeptieren

Wenn der Nutzer ein Gerät in der Geräteauswahl auswählt, erscheint auf dem Empfängergerät an, den Nutzer aufzufordern, die Verbindung zu akzeptieren. Nach der Annahme Zielaktivität wird gestartet, die in onCreate bearbeitet werden kann und 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)
}

Gerätefilter

Bei der Suche nach Geräten ist es üblich, diese Geräte so zu filtern, dass die für den jeweiligen Anwendungsfall relevant sind. Beispiel:

  • Nach Geräten mit Kamera filtern, um einen QR-Code zu scannen
  • Für die Wiedergabe auf einem großen Bildschirm nach Fernsehern filtern

Für diese Entwicklervorschau bieten wir zunächst die Möglichkeit, Geräte desselben Nutzers

Sie können den Gerätefilter mithilfe der Klasse DeviceFilter angeben:

Kotlin

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

Java

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

Nachdem Sie die Gerätefilter definiert haben, können Sie die Geräteerkennung starten.

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

Beachten Sie, dass launchDevicePicker eine asynchrone Funktion ist, die den suspend Keyword.