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