Cihaz keşfi API'sı

Neredeyse her çoklu cihaz deneyimi, kullanılabilir cihazları bulmakla başlar. Bu yaygın görevi basitleştirmek için Device Discovery API'yi sunuyoruz.

Yakındaki kullanıcılarla paylaşım seçenekleri sunan iletişim kutusu
Şekil 1: Yakındaki kullanıcılarla paylaşma.

Cihaz seçimi iletişim kutusunu başlat

Cihaz bulma özelliği, kullanıcının hedef cihaz seçmesine izin vermek için bir sistem iletişim kutusu kullanır. Cihaz seçimi iletişim kutusunu başlatmak için önce bir cihaz keşif istemcisi almanız ve bir sonuç alıcısı kaydetmeniz gerekir. registerForActivityResult ile benzer şekilde, bu alıcının da etkinlik veya parça başlatma yolunun bir parçası olarak koşulsuz olarak kaydedilmesi gerektiğini unutmayın.

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);
}

Yukarıdaki kod snippet'inde tanımlanmamış bir handleDevices nesnesi var. Kullanıcı bağlanacak cihazları seçtikten ve SDK diğer cihazlara başarıyla bağlandığında bu geri çağırma, seçilen Participants listesini alır.

Kotlin

handleDevices = OnDevicePickerResultListener { participants -> participants.forEach {
    // Use participant info
  }
}

Java

handleDevices = participants -> {
   for (Participant participant : participants) {
      // Use participant info
   }
}

Kaydedildikten sonra devicePickerLauncher örneğini kullanarak cihaz seçiciyi başlatın. DevicePickerLauncher.launchDevicePicker iki parametre alır: cihaz filtrelerinin listesi (aşağıdaki bölüme bakın) ve bir startComponentRequest. startComponentRequest, alıcı cihazda hangi etkinliğin başlatılması gerektiğini ve kullanıcıya gösterilen isteğin nedenini belirtmek için kullanılır.

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());

Bağlantı isteklerini kabul et

Kullanıcı, cihaz seçicide bir cihaz seçtiğinde, alıcı cihazda kullanıcıdan bağlantıyı kabul etmesini isteyen bir iletişim kutusu görünür. Kabul edildikten sonra hedef etkinlik başlatılır ve bu etkinlik onCreate ve onNewIntent içinde işlenebilir.

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)
}

Cihaz filtreleri

Cihazları keşfederken genellikle bu cihazları, yalnızca elinizdeki kullanım alanıyla alakalı olanları gösterecek şekilde filtrelemek isteyebilirsiniz. Örneğin:

  • QR kodunun taranmasına yardımcı olmak için yalnızca kamerası olan cihazları filtreleme
  • Büyük ekran izleme deneyimi için yalnızca TV'leri filtreleme

Bu geliştirici önizlemesi için ilk olarak aynı kullanıcıya ait cihazları filtreleme özelliğini başlatıyoruz.

DeviceFilter sınıfını kullanarak cihaz filtresini belirtebilirsiniz:

Kotlin

val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))

Java

List<DeviceFilter> deviceFilters =
    Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));

Cihaz filtrelerini tanımladıktan sonra cihaz keşfini başlatabilirsiniz.

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);

launchDevicePicker öğesinin, suspend anahtar kelimesini kullanan eşzamansız bir işlev olduğuna dikkat edin.