כשמשתמשים מגדירים מכשיר 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:19.0.0' }
מצהירים על
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
- חיסכון בצריכת החשמל ובסוללה