Hampir setiap pengalaman multiperangkat dimulai dengan menemukan perangkat yang tersedia. Kepada menyederhanakan tugas umum ini, kami menawarkan Device Discovery API.
Meluncurkan dialog pemilihan perangkat
Penemuan perangkat menggunakan dialog sistem yang memungkinkan pengguna memilih perangkat target. Kepada
memulai dialog pemilihan perangkat, Anda harus mendapatkan penemuan perangkat
dan mendaftarkan penerima hasil. Perhatikan bahwa mirip dengan
registerForActivityResult
, penerima ini harus terdaftar tanpa syarat sebagai
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. Sesudah
pengguna memilih perangkat yang akan dihubungkan, dan setelah SDK berhasil
terhubung ke perangkat lain, callback ini akan menerima daftar Participants
dipilih.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
Setelah alat pilih perangkat didaftarkan, luncurkan menggunakan devicePickerLauncher
di instance Compute Engine. DevicePickerLauncher.launchDevicePicker
menggunakan dua parameter –
daftar filter perangkat (lihat bagian di bawah) dan startComponentRequest
. Tujuan
startComponentRequest
digunakan untuk menunjukkan aktivitas mana 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());
Terima permintaan koneksi
Saat pengguna memilih perangkat di pemilih perangkat, dialog akan muncul di
perangkat penerima untuk meminta
pengguna menerima koneksi. Setelah disetujui,
aktivitas target 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 perangkat tersebut difilter agar hanya menunjukkan opsi yang relevan dengan kasus penggunaan saat ini. Contoh:
- Memfilter hanya ke perangkat yang memiliki kamera untuk membantu memindai kode QR
- Memfilter ke TV saja untuk pengalaman menonton layar TV
Untuk pratinjau pengembang ini, kita mulai dengan kemampuan untuk memfilter ke 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
.