Device Discovery API

تقریباً هر تجربه چند دستگاهی با یافتن دستگاه های موجود آغاز می شود. برای ساده‌سازی این کار رایج، Device Discovery API را ارائه می‌کنیم.

کادر گفتگو با گزینه های اشتراک گذاری با کاربران اطراف
شکل 1 : اشتراک گذاری با کاربران اطراف.

گفتگوی انتخاب دستگاه را اجرا کنید

Device Discovery از یک گفتگوی سیستم استفاده می کند تا به کاربر اجازه دهد دستگاه مورد نظر را انتخاب کند. برای شروع گفتگوی انتخاب دستگاه، ابتدا باید یک کلاینت کشف دستگاه دریافت کنید و یک گیرنده نتیجه را ثبت کنید. توجه داشته باشید که مشابه registerForActivityResult ، این گیرنده باید بدون قید و شرط به عنوان بخشی از مسیر اولیه فعالیت یا قطعه ثبت شود.

کاتلین

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  devicePickerLauncher = Discovery.create(this).registerForResult(this, handleDevices)
}

جاوا

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  devicePickerLauncher = Discovery.create(this).registerForResult(this, handleDevices);
}

در قطعه کد بالا، یک شی handleDevices تعریف نشده داریم. پس از اینکه کاربر دستگاه‌هایی را برای اتصال انتخاب کرد و پس از اینکه SDK با موفقیت به دستگاه‌های دیگر متصل شد، این پاسخ تماس فهرستی از Participants انتخاب شده را دریافت می‌کند.

کاتلین

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

جاوا

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

پس از اینکه انتخابگر دستگاه ثبت شد، آن را با استفاده از نمونه devicePickerLauncher راه اندازی کنید. DevicePickerLauncher.launchDevicePicker دو پارامتر را می گیرد - یک لیست از فیلترهای دستگاه (به بخش زیر مراجعه کنید) و یک startComponentRequest . startComponentRequest برای نشان دادن اینکه کدام فعالیت باید در دستگاه دریافت کننده شروع شود و دلیل درخواستی که به کاربر نشان داده می شود استفاده می شود.

کاتلین

devicePickerLauncher.launchDevicePicker(
  listOf(),
  startComponentRequest {
    action = "com.example.crossdevice.MAIN"
    reason = "I want to say hello to you"
  },
)

جاوا

devicePickerLauncher.launchDevicePickerFuture(
    Collections.emptyList(),
    new StartComponentRequest.Builder()
        .setAction("com.example.crossdevice.MAIN")
        .setReason("I want to say hello to you")
        .build());

درخواست های اتصال را بپذیرید

هنگامی که کاربر دستگاهی را در انتخابگر دستگاه انتخاب می کند، یک گفتگو در دستگاه دریافت کننده ظاهر می شود تا از کاربر بخواهد اتصال را بپذیرد. پس از پذیرش، فعالیت هدف راه‌اندازی می‌شود که می‌توان آن را در onCreate و onNewIntent مدیریت کرد.

کاتلین

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

جاوا

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

فیلترهای دستگاه

هنگام کشف دستگاه‌ها، معمول است که بخواهید این دستگاه‌ها را فیلتر کنید تا فقط موارد مربوط به مورد استفاده را نشان دهید. به عنوان مثال:

  • فیلتر کردن فقط برای دستگاه‌های دارای دوربین برای کمک به اسکن کد QR
  • فیلتر کردن فقط روی تلویزیون ها برای تجربه تماشای صفحه بزرگ

برای این پیش‌نمایش توسعه‌دهنده، ما با قابلیت فیلتر کردن به دستگاه‌های متعلق به یک کاربر شروع می‌کنیم.

می توانید فیلتر دستگاه را با استفاده از کلاس DeviceFilter مشخص کنید:

کاتلین

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

جاوا

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

هنگامی که فیلترهای دستگاه را تعریف کردید، می توانید کشف دستگاه را آغاز کنید.

کاتلین

devicePickerLauncher.launchDevicePicker(deviceFilters, startComponentRequest)

جاوا

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 استفاده می کند.