عندما يُعدّ المستخدمون جهاز Wear OS، فإنّهم يربطون جهاز Wear OS بجهاز جوّال معيّن. قد يقرّر المستخدم لاحقًا الحصول على جهاز جوّال جديد وربط جهاز Wear OS الحالي بهذا الجهاز الجوّال الجديد. يتم تخزين بعض البيانات المرتبطة بجهاز Wear OS على الجهاز الجوّال المتصل حاليًا.
اعتبارًا من Wear OS 4، عندما يربط المستخدمون جهاز Wear OS بجهاز جوّال جديد، يمكنهم نقل بيانات Wear OS إلى الجهاز الجوّال الجديد. تتم مزامنة البيانات تلقائيًا عند نقلها.
عندما يطلب المستخدم نقل البيانات، تقدّم طبقة بيانات الأجهزة القابلة للارتداء كائنات
DataItem، التي تم تخزينها في الأصل على أحد الأجهزة الجوّالة، إلى الجهاز الجوّال الآخر. ويتيح ذلك تجربة سلسة لمستخدمي تطبيقك.
يوضّح هذا المستند كيفية ضبط تطبيق Wear OS وتطبيق الأجهزة الجوّالة المصاحب له لإتاحة هذا السيناريو.
الإعداد
تتعامل عملية نقل البيانات مع عناصر DataItem بشكل مختلف، وذلك استنادًا إلى التطبيق الذي يملك البيانات:
- العناصر التي يملكها تطبيق Wear OS
- يتم الاحتفاظ بهذه العناصر على جهاز Wear OS.
- العناصر التي يملكها تطبيق الأجهزة الجوّالة
يتم أرشفة هذه العناصر على الجهاز القديم. بعد ذلك، يحوّل النظام البيانات المؤرشفة إلى حزمة على شكل عنصر
DataItemBuffer، ثم يرسل هذه البيانات إلى التطبيق المتوافق مع الأجهزة الجوّالة المثبَّت على الجهاز الجوّال الجديد.بعد تسليم الأرشيف مباشرةً، تستدعي "طبقة بيانات الأجهزة القابلة للارتداء" أداة الاستماع
onNodeMigrated()، على غرار الطريقة التي يتم بها إعلام تطبيقك عند كتابة البيانات بواسطة جهاز Wear OS.
الاحتفاظ بالبيانات المنقولة
يتحمّل تطبيقك مسؤولية الحفاظ على عناصر DataItem التي تم نقلها.
بعد وقت قصير من تسليم البيانات إلى الجهاز الجوّال الجديد، يتم حذف الأرشيف من الجهاز القديم.
تأكَّد من استيفاء الشروط التالية:
- يجب أن يكون تطبيقك مثبَّتًا على كلا الجهازَين الجوّالَين المشاركَين في عملية النقل.
- تحتوي تطبيقات الأجهزة الجوّالة المثبَّتة على كل جهاز جوّال على تواقيع حِزم متطابقة.
وبخلاف ذلك، لن يتم تسليم عناصر DataItem المؤرشفة، وسيتم بدلاً من ذلك تجاهلها.
تلقّي البيانات من الجهاز الجوّال القديم
لتلقّي البيانات على الجهاز الجوّال الجديد التي تم أرشفتها على الجهاز الجوّال القديم، يجب أن ينفّذ تطبيقك على الجهاز الجوّال وظيفة الاستدعاء onNodeMigrated()، وهي جزء من الفئة WearableListenerService. لإجراء ذلك، أكمل الخطوات التالية:
في ملف الإصدار لتطبيقك على الأجهزة الجوّالة، أدرِج تبعية لأحدث إصدار من مكتبة الأجهزة القابلة للارتداء في "خدمات Google Play":
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
- توفير الطاقة والبطارية