Device Discovery API

כמעט כל חוויה שכוללת כמה מכשירים מתחילה באיתור המכשירים הזמינים. שפת תרגום מפשטים את המשימה הנפוצה הזו, אנחנו מציעים את Device Discovery API.

תיבת דו-שיח עם אפשרויות שיתוף למשתמשים בקרבת מקום
איור 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 מצליח מתבצע חיבור למכשירים האחרים, וה-callback הזה מקבל את הרשימה של 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)
}

מסנני מכשירים

במהלך גילוי מכשירים, מקובל לסנן מכשירים אלה כדי יציגו את התשובות הרלוונטיות לתרחיש לדוגמה שבדוגמה. לדוגמה:

  • סינון רק למכשירים עם המצלמה כדי לעזור בסריקת קוד QR
  • סינון לצפייה בטלוויזיות בלבד כדי ליהנות מחוויית צפייה במסך גדול

בתצוגה המקדימה הזו למפתחים, אנחנו מתחילים עם האפשרות לסנן כדי מכשירים שבבעלות אותו משתמש.

אפשר לציין את מסנן המכשירים באמצעות מחלקה 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).