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.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
devicePickerLauncher = Discovery.create(this).registerForResult(this, handleDevices)
}
@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.
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach {
// Use participant info
}
}
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.
devicePickerLauncher.launchDevicePicker(
listOf(),
startComponentRequest {
action = "com.example.crossdevice.MAIN"
reason = "I want to say hello to you"
},
)
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
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)
}
@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
:
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
List<DeviceFilter> deviceFilters =
Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
Po zdefiniowaniu filtrów urządzeń możesz zainicjować wykrywanie urządzeń.
devicePickerLauncher.launchDevicePicker(deviceFilters, startComponentRequest)
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.