Kullanıcılar Wear OS cihaz kurulumu yaparken Wear OS cihazlarını bir cihaza bağlarlar. mobil cihazda devre dışı bırakabilirsiniz. Kullanıcı daha sonra yeni bir mobil cihaz almaya karar verebilir ve mevcut Wear OS cihazını bu yeni mobil cihaza bağlayabilirler. Bazı veriler bir Wear OS cihazıyla ilgili veriler şu anda bağlı olan mobil cihazda depolanıyorsa.
Wear OS 4'ten itibaren, kullanıcılar yeni bir mobil cihaza bağlandıklarında Wear OS verilerini yeni mobil cihaza aktarın. Veriler otomatik olarak senkronize edilir bir şifre ekleyebilirsiniz.
Kullanıcı bir aktarım isteğinde bulunduğunda Giyilebilir Veri Katmanı bunu yayınlar
İlk olarak bir mobil cihazda depolanan DataItem
nesne
mobil cihaz Bu sayede, uygulamanızın kullanıcılarına sorunsuz bir deneyim sunabilirsiniz.
Bu dokümanda, Wear OS uygulamanızı nasıl yapılandırabileceğiniz ve tamamlayıcı mobil uygulamayı kullanarak bu senaryoyu destekleyebilirsiniz.
Hazırlık
Veri aktarım işlemi, bağlı olarak DataItem
nesneyi farklı şekillerde işler.
verilerin sahibi olan uygulama:
- Wear OS uygulamasına ait nesneler
- Bu nesneler Wear OS cihazda korunur.
- Mobil uygulamaya ait nesneler
Bu nesneler eski cihazda arşivlenir. Ardından sistem, Arşivlenmiş verileri bir
DataItemBuffer
nesnesine aktarır ve bu verileri mobil uygulama yüklü olmalıdır.Arşiv teslim edildikten hemen sonra Giyilebilir Veri Katmanı
onNodeMigrated()
dinleyicisi, uygulamanıza bildirim gönderilmesine benzer şekilde Veriler Wear OS cihaz tarafından yazıldığında.
Aktarılan verileri koru
Aktarılan DataItem
nesneleri korumak uygulamanızın sorumluluğundadır.
Veriler yeni mobil cihaza teslim edildikten kısa bir süre sonra, arşiv
eski cihazdan silinmiş olabilir.
Aşağıdaki koşulların her birinin doğru olduğundan emin olun:
- Uygulamanız, aktarmalısınız.
- Her mobil cihazda yüklü mobil uygulamaların paketi vardır. eşleşen imzalar yer alır.
Aksi takdirde, arşivlenen DataItem
nesneleri yayınlanmaz ve
silindi.
Eski mobil cihazdan veri alma
Eski mobil cihazda arşivlenmiş yeni mobil cihazdaki verileri almak için
mobil uygulamanızın onNodeMigrated()
geri çağırmasını uygulaması gerekir.
WearableListenerService
sınıfının bir parçası. Bunun için aşağıdaki adımları uygulayın:
için şu adımları izleyin:
Mobil uygulamanızın derleme dosyasına en son sürüme bağımlılık ekleyin son 30 güne kadar
dependencies { ... implementation 'com.google.android.gms:play-services-wearable:18.2.0' }
Uygulamanızda
WearableListenerService
öğesini beyan edip dışa aktarın manifesto dosyası:<service android:name=".MyWearableListenerService" android:exported="true"> <intent-filter> ... <action android:name="com.google.android.gms.wearable.NODE_MIGRATED" /> <data android:scheme="wear" /> </intent-filter> </service>
WearableListenerService
kapsamını genişleten ve geçersiz kılma işlemlerini içeren bir hizmet sınıfı oluşturun.onNodeMigrated()
.Kotlin
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) } } } }
Java
public class MyWearableListenerService extends WearableListenerService { private final DataClient dataClient = Wearable.getDataClient(this); private boolean shouldHandleDataItem(String nodeId, DataItem dataItem) { // Your logic here return Objects.requireNonNull(dataItem.getUri().getPath()) .startsWith("/my_feature_path/"); } private Task<DataItem> handleDataItem(String nodeId, DataItem dataItem) { byte[] data = dataItem.getData(); String path = dataItem.getUri().getPath(); // Your logic here if (data != null && path != null && Arrays.toString(data) .startsWith("Please restore")) { assert path != null; return dataClient.putDataItem( PutDataRequest.create(path).setData(data)); } @Override public void onNodeMigrated(@NonNull String nodeId, DataItemBuffer archive) { List<DataItem> dataItemsToHandle = new ArrayList<>(); for (DataItem dataItem : archive) { if (shouldHandleDataItem(nodeId, dataItem)) { dataItemsToHandle.add(dataItem.freeze()); } } for (dataItem in dataItemsToHandle) { handleDataItem(nodeId, dataItem); } // Callback stops automatically after 20 seconds of data processing. // If you think you need more time, delegate to another thread. } }
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- Wear OS modülünü entegre etme
- Güç ve pil tasarrufu