Hampir setiap pengalaman multiperangkat dimulai dengan menemukan perangkat yang tersedia. Untuk menyederhanakan tugas umum ini, kami menawarkan Device Discovery API.
Meluncurkan dialog pemilihan perangkat
Penemuan perangkat menggunakan dialog sistem agar pengguna dapat memilih perangkat target. Untuk
memulai dialog pemilihan perangkat, Anda harus terlebih dahulu mendapatkan klien penemuan
perangkat dan mendaftarkan penerima hasil. Perhatikan bahwa mirip dengan
registerForActivityResult
, penerima ini harus didaftarkan tanpa syarat sebagai
bagian dari jalur inisialisasi aktivitas atau fragmen.
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); }
Dalam cuplikan kode di atas, kita memiliki objek handleDevices
yang tidak ditentukan. Setelah
pengguna memilih perangkat yang akan dihubungkan, dan setelah SDK berhasil
terhubung ke perangkat lain, callback ini akan menerima daftar Participants
yang dipilih.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
Setelah alat pilih perangkat terdaftar, luncurkan menggunakan instance
devicePickerLauncher
. DevicePickerLauncher.launchDevicePicker
menggunakan dua parameter – daftar filter perangkat (lihat bagian di bawah) dan startComponentRequest
. startComponentRequest
digunakan untuk menunjukkan aktivitas yang harus dimulai di
perangkat penerima, dan alasan permintaan yang ditampilkan kepada pengguna.
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());
Menerima permintaan koneksi
Saat pengguna memilih perangkat di alat pilih perangkat, dialog akan muncul di
perangkat penerima untuk meminta pengguna menyetujui koneksi. Setelah disetujui, aktivitas target akan diluncurkan, yang dapat ditangani di onCreate
dan
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) }
Filter perangkat
Saat menemukan perangkat, biasanya Anda ingin memfilter perangkat tersebut agar hanya menampilkan perangkat yang relevan dengan kasus penggunaan yang sedang ditangani. Contoh:
- Memfilter hanya ke perangkat yang memiliki kamera untuk membantu memindai kode QR
- Memfilter hanya TV untuk pengalaman menonton di layar TV
Untuk pratinjau developer ini, kami memulai dengan kemampuan untuk memfilter menurut perangkat yang dimiliki oleh pengguna yang sama.
Anda dapat menentukan filter perangkat menggunakan class DeviceFilter
:
Kotlin
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
Java
List<DeviceFilter> deviceFilters = Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
Setelah menentukan filter perangkat, Anda dapat memulai penemuan perangkat.
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);
Perhatikan bahwa launchDevicePicker
adalah fungsi asinkron yang menggunakan
kata kunci suspend
.