Device discovery API

Hampir setiap pengalaman multiperangkat dimulai dengan menemukan perangkat yang tersedia. Kepada 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 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.