כשמשתמשים מגדירים מכשיר Wear OS, הם מחברים את מכשיר Wear OS למכשיר נייד מסוים. יכול להיות שהמשתמש יחליט בהמשך לקנות מכשיר נייד חדש ולחבר אליו את מכשיר Wear OS הקיים. חלק מהנתונים שקשורים למכשיר Wear OS מאוחסנים במכשיר הנייד שמחובר אליו כרגע.
החל מ-Wear OS 4, כשמשתמשים מתחברים למכשיר נייד חדש, הם יכולים להעביר את הנתונים של Wear OS למכשיר הנייד החדש. הנתונים מסתנכרנים אוטומטית כשהם מועברים.
כשהמשתמש מבקש העברה, שכבת הנתונים של המכשיר הלביש מעבירה אובייקטים של DataItem, שאוחסנו במקור במכשיר נייד אחד, למכשיר הנייד השני. כך המשתמשים באפליקציה נהנים מחוויה חלקה.
במאמר הזה מוסבר איך להגדיר את אפליקציה ל-Wear OS ואת האפליקציה לנייד שמשלימה אותה כדי לתמוך בתרחיש הזה.
הכנה
תהליך העברת הנתונים מטפל באובייקטים של DataItem בצורה שונה, בהתאם לאפליקציה שבבעלותה הנתונים:
- אובייקטים בבעלות אפליקציה ל-Wear OS
- האובייקטים האלה נשמרים במכשיר Wear OS.
- אובייקטים שבבעלות האפליקציה לנייד
האובייקטים האלה יועברו לארכיון במכשיר הישן. לאחר מכן המערכת אורזת את הנתונים שנארכו באובייקט
DataItemBufferומעבירה את הנתונים לאפליקציה לנייד שמותקנת במכשיר הנייד החדש.מיד אחרי שהארכיון נמסר, Wearable Data Layer מפעיל את מאזין
onNodeMigrated(), בדומה לאופן שבו האפליקציה מקבלת הודעה כשנתונים נכתבים על ידי מכשיר Wear OS.
שמירה על הנתונים שהועברו
באחריות האפליקציה לשמור על אובייקטים DataItem שהועברו.
זמן קצר אחרי שהנתונים מועברים למכשיר הנייד החדש, הארכיון נמחק מהמכשיר הישן.
חשוב לוודא שכל התנאים הבאים מתקיימים:
- האפליקציה מותקנת בשני המכשירים הניידים שמשתתפים בהעברה.
- האפליקציות לנייד, שמותקנות בכל מכשיר נייד, כוללות חתימות של חבילות שזהות.
אחרת, אובייקטים של DataItem בארכיון לא נמסרים אלא נמחקים.
קבלת נתונים מהמכשיר הנייד הישן
כדי לקבל נתונים במכשיר הנייד החדש שנוספו לארכיון במכשיר הנייד הישן, צריך להטמיע באפליקציה לנייד את הקריאה החוזרת onNodeMigrated(), שהיא חלק מהמחלקה WearableListenerService. כדי לעשות את זה, מבצעים את השלבים הבאים:
בקובץ ה-build של האפליקציה לנייד, כוללים תלות בגרסה העדכנית של ספריית המכשירים הלבישים ב-Google Play Services:
dependencies { ... implementation 'com.google.android.gms:play-services-wearable:20.0.1' }מצהירים על
WearableListenerServiceומייצאים אותו בקובץ המניפסט של האפליקציה:<service android:name=".snippets.datalayer.MyWearableListenerService" android:exported="true" tools:ignore="ExportedService"> <intent-filter> <action android:name="com.google.android.gms.wearable.NODE_MIGRATED" /> <data android:scheme="wear" android:host="*" /> </intent-filter> </service>
יוצרים מחלקת שירות שמרחיבה את
WearableListenerServiceומבטלת אתonNodeMigrated().class MyWearableListenerService : WearableListenerService() { val dataClient: DataClient = Wearable.getDataClient(this) private fun shouldHandleDataItem(nodeId: String, dataItem: DataItem): Boolean { // Your logic here return dataItem.uri.path?.startsWith("/my_feature_path/") == true } private fun handleDataItem(nodeId: String, dataItem: DataItem) { val data = dataItem.data ?: return val path = dataItem.uri.path ?: return // Your logic here if (data.toString().startsWith("Please restore")) { dataClient.putDataItem(PutDataRequest.create(path).setData(data)) } } override fun onNodeMigrated(nodeId: String, archive: DataItemBuffer) { val dataItemsToHandle = mutableListOf<DataItem>() for (dataItem in archive) { if (shouldHandleDataItem(nodeId, dataItem)) { dataItemsToHandle.add(dataItem.freeze()) } } // Callback stops automatically after 20 seconds of data processing. // If you think you need more time, delegate to a coroutine or thread. runBlocking { for (dataItem in dataItemsToHandle) { handleDataItem(nodeId, dataItem) } } } }
מומלץ בשבילכם
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- הטמעה של מודול Wear OS
- חיסכון בחשמל ובסוללה