تبدأ كل تجربة مصمّمة لأجهزة متعدّدة تقريبًا بالعثور على الأجهزة المتاحة. إلى لتبسيط هذه المهمة الشائعة، نقدم واجهة برمجة تطبيقات Device Discovery.
فتح مربع حوار اختيار الأجهزة
تستخدم ميزة "اكتشاف الجهاز" مربّع حوار النظام للسماح للمستخدم باختيار جهاز مستهدَف. إلى
بدء مربع حوار اختيار الجهاز، يلزمك أولاً اكتشاف
العميل وتسجيل متلقي النتيجة. لاحظ أن تشبه
registerForActivityResult
، يجب تسجيل هذا المُستلِم بدون شروط باعتباره
جزء من مسار تهيئة النشاط أو الجزء.
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); }
في مقتطف الرمز أعلاه، لدينا كائن handleDevices
غير معروف. بعد
يختار المستخدم الأجهزة التي يريد الاتصال بها، وبعد أن يتم بنجاح إنشاء حزمة تطوير البرامج (SDK)
يتصل بالأجهزة الأخرى، ستتلقّى قائمة "Participants
" هذه.
المحددة.
Kotlin
handleDevices = OnDevicePickerResultListener { participants -> participants.forEach { // Use participant info } }
Java
handleDevices = participants -> { for (Participant participant : participants) { // Use participant info } }
بعد تسجيل أداة اختيار الأجهزة، فعِّلها باستخدام devicePickerLauncher
.
مثال. تأخذ DevicePickerLauncher.launchDevicePicker
معلمتين – a
قائمة بفلاتر الأجهزة (راجِع القسم أدناه) وstartComponentRequest
تشير رسالة الأشكال البيانية
تُستخدم startComponentRequest
للإشارة إلى النشاط الذي يجب أن يبدأ في
الجهاز المُستلِم وسبب الطلب الذي يظهر للمستخدم.
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());
قبول طلبات الربط
عندما يختار المستخدم جهازًا في منتقي الأجهزة، سيظهر مربع حوار في
جهاز الاستقبال ليطلب من المستخدم قبول الاتصال. بعد قبول الاتفاقية،
تم إطلاق النشاط المستهدف، والذي يمكن التعامل معه في onCreate
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) }
فلاتر الجهاز
عند اكتشاف الأجهزة، من الشائع أن تريد فلترة هذه الأجهزة لعرض ستظهر الكلمات الرئيسية ذات الصلة بحالة الاستخدام المطروحة. مثلاً:
- الفلترة لعرض الأجهزة التي تتضمن كاميرا فقط للمساعدة في مسح رمز الاستجابة السريعة ضوئيًا
- فلترة الفيديوهات لعرض أجهزة التلفزيون فقط لتجربة مشاهدة على الشاشة الكبيرة
وفي ما يتعلّق بمعاينة المطوِّر هذه، سنبدأ مع إمكانية الفلترة لعرض الأجهزة المملوكة للمستخدم نفسه.
يمكنك تحديد فلتر الجهاز باستخدام الفئة DeviceFilter
:
Kotlin
val deviceFilters = listOf(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY))
Java
List<DeviceFilter> deviceFilters = Arrays.asList(DeviceFilter.trustRelationshipFilter(MY_DEVICES_ONLY));
وبعد تحديد فلاتر الجهاز، يمكنك بدء اكتشاف الأجهزة.
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
هي دالة غير متزامنة تستخدم
كلمة رئيسية واحدة (suspend
).