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

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