تبدأ كل تجربة لأجهزة متعددة تقريبًا بالعثور على الأجهزة المتاحة. لتبسيط هذه المهمة الشائعة، نقدّم Device Discovery API.
فتح مربع حوار اختيار الجهاز
تستخدم ميزة "اكتشاف الجهاز" مربّع حوار نظام للسماح للمستخدم باختيار الجهاز المستهدَف. لبدء مربع حوار اختيار الجهاز، تحتاج أولاً إلى الحصول على عميل اكتشاف الجهاز وتسجيل مستلم النتائج. يُرجى العِلم أنّه على غرار
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
معلَمتين - قائمة بفلاتر الأجهزة (انظر القسم أدناه) و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
.