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.
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.