כמעט כל חוויה שכוללת כמה מכשירים מתחילה באיתור המכשירים הזמינים. שפת תרגום מפשטים את המשימה הנפוצה הזו, אנחנו מציעים את 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 מצליח
מתבצע חיבור למכשירים האחרים, וה-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
).