واجهة برمجة تطبيقات اكتشاف الأجهزة

تبدأ كل تجربة مصمّمة لأجهزة متعدّدة تقريبًا بالعثور على الأجهزة المتاحة. إلى لتبسيط هذه المهمة الشائعة، نقدم واجهة برمجة تطبيقات Device Discovery.

مربع حوار يتضمن خيارات المشاركة مع المستخدمين القريبين
الشكل 1: المشاركة مع مستخدمين مجاورين

فتح مربع حوار اختيار الأجهزة

تستخدم ميزة "اكتشاف الجهاز" مربّع حوار النظام للسماح للمستخدم باختيار جهاز مستهدَف. إلى بدء مربع حوار اختيار الجهاز، يلزمك أولاً اكتشاف العميل وتسجيل متلقي النتيجة. لاحظ أن تشبه 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).