Niemal każde korzystanie z wielu urządzeń rozpoczyna się od znalezienia dostępnych urządzeń. Do aby uprościć to typowe zadanie, oferujemy interfejs Device Discovery API.
Otwórz okno wyboru urządzenia
Wykrywanie urządzeń używa okna systemowego, aby umożliwić użytkownikowi wybranie urządzenia docelowego. Do
otwórz okno wyboru urządzenia,
klienta i zarejestrują odbiorcę wyników. Pamiętaj, że podobnie jak
registerForActivityResult
, ten odbiorca musi być bezwarunkowo zarejestrowany jako
należy do ścieżki inicjowania aktywności lub fragmentów.
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); }
We fragmencie kodu powyżej znajduje się niezdefiniowany obiekt handleDevices
. Po
użytkownik wybiera urządzenia, z którymi ma się połączyć, a gdy pakiet SDK się sprawdzi,
łączy się z innymi urządzeniami, to wywołanie zwrotne otrzymuje listę Participants
zaznaczono.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
Po zarejestrowaniu selektora urządzeń uruchom go za pomocą polecenia devicePickerLauncher
instancji. Funkcja DevicePickerLauncher.launchDevicePicker
ma 2 parametry:
listę filtrów urządzeń (patrz sekcja poniżej) oraz startComponentRequest
.
startComponentRequest
służy do wskazywania, które działanie ma być rozpoczęte
urządzenie odbierające oraz powód żądania
wyświetlany użytkownikowi.
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());
Akceptuj prośby o połączenie
Gdy użytkownik wybierze urządzenie w selektorze urządzeń, na
aby poprosić użytkownika o zaakceptowanie połączenia. Po zaakceptowaniu
uruchomiona jest docelowa aktywność, która może być obsługiwana w onCreate
oraz
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) }
Filtry urządzeń
Często przy wykrywaniu urządzeń warto filtrować je tylko w celu które pasują do danego przypadku użycia. Na przykład:
- Filtrowanie tylko urządzeń z aparatem ułatwia skanowanie kodu QR
- Filtrowanie wyświetla tylko na telewizory, aby można było oglądać je na dużym ekranie.
W tej wersji przedpremierowej dla programistów zaczynamy od możliwości filtrowania w celu urządzeń należących do tego samego użytkownika.
Filtr urządzeń możesz określić za pomocą klasy DeviceFilter
:
Kotlin
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
Java
List<DeviceFilter> deviceFilters = Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
Po zdefiniowaniu filtrów urządzeń możesz zainicjować wykrywanie urządzeń.
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);
Zwróć uwagę, że launchDevicePicker
jest funkcją asynchroniczną, która korzysta z
suspend
słowo kluczowe.