Device discovery API

Hampir setiap pengalaman multiperangkat dimulai dengan menemukan perangkat yang tersedia. Untuk menyederhanakan tugas umum ini, kami menawarkan Device Discovery API.

Kotak dialog dengan opsi berbagi kepada pengguna di sekitar
Gambar 1: Berbagi dengan pengguna di sekitar.

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.