Watch Face Push, uygulamanızın Wear OS cihazındaki kadranları yönetmesine olanak tanır. Buna kadran ekleme, güncelleme ve kaldırmanın yanı sıra etkin kadranı ayarlama da dahildir. Wear OS uygulamanızı Watch Face Push API'yi kullanacak şekilde yapılandırın.
Kurulum
Gerekli bağımlılıkları ekleyin:
implementation("androidx.wear.watchfacepush:watchfacepush:1.0.0-alpha01")
AndroidManifest.xml
alanına aşağıdakileri ekleyin:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Required to use the Watch Face Push API. -->
<uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />
<!-- Required to be able to call the setWatchFaceAsActive() method. -->
<uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
</manifest>
Yönetici örneğine referans alma
WatchFacePushManager
örneğini edinme:
val manager = WatchFacePushManagerFactory.createWatchFacePushManager(context)
WatchFacePushManager
, Watch Face Push ile etkileşim kurma yöntemlerinin tümüne erişim sağlar.
Slotlarla çalışma
Watch Face Push ile çalışırken önemli bir kavram yuvalardır. Yuvalar, uygulamanıza ait yüklü kadranları ele almanın bir yoludur. Sistem, bir pazar yerinin sahip olabileceği maksimum slot sayısını belirler. Wear OS 6'da bu sınır 1'dir.
Saat yüzü güncellenirken veya kaldırılırken işlem yapılacak saat yüzünü belirlemek için slotId
kullanılır.
Kadranları listeleme
Yüklü saat yüzlerinin listesini görmek için listWatchFaces()
komutunu kullanın:
val response = watchFacePushManager.listWatchFaces()
val installedList = response.installedWatchFaceDetails
val remainingSlots = response.remainingSlots
Bu sayede, yuvanın kullanılabilir olup olmadığını veya başka bir kadran eklemek için mevcut kadranın değiştirilmesi gerekip gerekmediğini belirleyebilirsiniz. Bu listede, yüklü kadranla ilgili ayrıntılar da yer alır. Örneğin, belirli bir kadran paketinin yüklü olup olmadığını kontrol etmek için:
suspend fun isInstalled(packageName: String) = watchFacePush.listWatchFaces()
.installedWatchFaceDetails.any { it.packageName == packageName }
Kadran ekleme
listWatchFaces
yanıtında belirtildiği gibi uygun alanlar varsa addWatchFace()
yöntemi kullanılmalıdır:
try {
// Supply the validation token along with the watch face package data itself.
val slot = watchFacePushManager.addWatchFace(parcelFileDescriptor, token)
Log.i(TAG, "${slot.packageName} (${slot.versionCode}) added in slot ${slot.slotId}")
} catch (e: AddWatchFaceException) {
// Something went wrong adding the watch face.
}
Kadranı güncelleme
Kadran güncelleme, belirli bir yuvanın içeriğini yeni bir paketle değiştirmenize olanak tanır. Bu işlem, aynı kadranı daha yeni bir sürüme yükseltmek veya kadranı tamamen başka bir kadranla değiştirmek olabilir.
// Replacing the com.example.watchfacepush.green watch face with
// com.example.watchfacepush.red.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId
try {
watchFacePushManager.updateWatchFace(slotId, redParcelFileDesc, redValidationToken)
} catch (e: UpdateWatchFaceException) {
// Something went wrong updating the watch face.
}
Saat yüzünü kaldırma
Bir saat yüzünü kaldırmak için:
// Remove the com.example.watchfacepush.green watch face.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId
try {
watchFacePushManager.removeWatchFace(slotId)
} catch (e: RemoveWatchFaceException) {
// Something went wrong removing the watch face.
}
Bu sayede saat yüzünüzün her zaman sistem saat yüzü seçicide bulunabilmesini, logonuzun belirgin bir şekilde gösterilmesini ve hatta telefonda Marketplace uygulamanızı başlatacak bir düğme içermesini sağlayabilirsiniz.
Saat yüzünüzün etkin olup olmadığını kontrol etme
Kullanıcının sorunsuz bir deneyim yaşamasını sağlamak için pazar yerinizde etkin saat yüzünün ayarlanıp ayarlanmadığını belirlemek önemlidir. Pazar yerinde etkin saat yüzü zaten ayarlanmışsa kullanıcının başka bir saat yüzü seçmek için mevcut olanı pazar yeri uygulaması üzerinden değiştirmesi yeterlidir. Ancak, pazar yerinde etkin bir saat yüzü ayarlanmamışsa telefon uygulaması, kullanıcıya daha fazla rehberlik sunmalıdır. Bu kullanıcı deneyiminin nasıl ele alınacağı hakkında daha fazla bilgi için telefon uygulamasıyla ilgili bölüme bakın.
Pazar yerinde etkin kadranın ayarlanıp ayarlanmadığını belirlemek için aşağıdaki mantığı kullanın:
val hasActiveWatchFace = watchFacePushManager.listWatchFaces()
.installedWatchFaceDetails
.any {
watchFacePushManager.isWatchFaceActive(it.packageName)
}
Varsayılan bir kadran sağlama
Kadranı cihaza gönderme özelliği, pazar yeri uygulamanız yüklendiğinde varsayılan bir kadran yükleme olanağı sunar. Bu işlem, varsayılan kadranı etkin olarak ayarlamaz (bkz. etkin kadranı ayarlama) ancak kadranınızın sistem kadran seçicisinde kullanılabilmesini sağlar.
Bu özelliği kullanmak için:
- Wear OS uygulama derlemenizde, varsayılan saat yüzünü şu yola ekleyin:
assets/default_watchface.apk
AndroidManifest.xml
dosyanıza aşağıdaki girişi ekleyin.<application ...> <meta-data android:name="com.google.android.wearable.marketplace.DEFAULT_WATCHFACE_VALIDATION_TOKEN" android:value="@string/default_wf_token" />
Etkin kadranı ayarlama
Watch Face Push, Marketplace uygulamasının etkin kadranı ayarlamasına olanak tanır.
Bu, özellikle mevcut etkin kadranın Marketplace'e ait olmadığı durumlarda uygulamanın etkin kadranı Marketplace'e ait bir kadran olarak ayarlayabileceği anlamına gelir. Pazar yerinde etkin kadran zaten varsa bu kadranı başka bir kadranla değiştirmek için updateWatchFace
çağrısı yapılarak kadran yuvasının içeriği başka bir kadranla değiştirilir.
Etkin kadranı ayarlamak iki aşamalı bir işlemdir:
- Etkin kadranı ayarlamak için gereken Android iznini alın.
setWatchFaceAsActive
yöntemini çağırın.
Etkin kadranı ayarlamak için izin alma
Gerekli izin SET_PUSHED_WATCH_FACE_AS_ACTIVE
'dır ve manifestinize eklenmelidir:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
...
<uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
</manifest>
Bu bir çalışma zamanı izni olduğundan uygulamanız, uygulama çalışırken kullanıcıdan bu izni istemelidir (bu konuda yardımcı olması için Accompanist kitaplığını kullanabilirsiniz).
Kadranı etkin olarak ayarlama
İzin verildikten sonra, etkin olması gereken saat yüzünün yuva kimliğinde setWatchFaceAsActive
işlevini çağırın:
watchFacePushManager.setWatchFaceAsActive(slotId)
Bu yöntem kullanıldıktan sonra telefon uygulamanız, etkin kadranın manuel olarak nasıl ayarlanacağı konusunda yol gösterici bilgiler sunmalıdır.
Kadranınızın APK'sından ek meta veriler okuma
WatchFaceSlot
nesnesi, kadranınızda belirtebileceğiniz ek bilgileri edinme olanağı da sunar.
Bu özellik, özellikle aynı saat yüzünün küçük varyantlarına sahip olduğunuz senaryolarda yararlı olabilir. Örneğin, aşağıdaki gibi tanımlanmış bir saat yüzünüz olabilir:
- Paket adı:
com.myapp.watchfacepush.mywatchface
- Paket sürümü:
1.0.0
Ancak bu saat yüzü, dört farklı APK olarak sunulabilir. Bu APK'ların hepsi neredeyse tamamen aynıdır ancak farklı varsayılan renklere (kırmızı, sarı, yeşil ve mavi) sahiptir. Bu renkler, Saat Kadranı Formatı XML'sinde ColorConfiguration
olarak ayarlanır.
Bu küçük değişiklik, dört APK'nın her birine yansıtılır:
<!-- For watch face com.myapp.watchfacepush.mywatchface -->
<property
android:name="default_color"
android:value="red" />
Özel bir özellik kullanmak, uygulamanızın bu varyantlardan hangisinin yüklendiğini belirlemesine olanak tanır:
watchFaceDetails
.getMetaDataValues("com.myapp.watchfacepush.mywatchface.default_color")
.invoke()
Dikkat edilmesi gereken noktalar
Uygulamanızda Watch Face Push'u uygularken dikkat etmeniz gereken önemli noktalar arasında güç tüketimine odaklanma, önbelleğe alma, paketlenmiş kadranları güncelleme ve temsili bir varsayılan kadran sağlama yer alır.
Güç
Wear OS'te çalışan tüm uygulamalar için önemli bir husus güç tüketimidir. Marketplace uygulamanızın Wear OS bileşeni için:
- Uygulamanız, kullanıcı tarafından doğrudan etkileşimde bulunulmadığı sürece mümkün olduğunca az ve seyrek çalışmalıdır. Bu türdeki bilgilere şunlar dahildir:
- Telefon uygulamasından uygulamayı uyandırmayı en aza indirme
- WorkManager işlerinin çalıştırılmasını en aza indirme
- Kol saati şarj olurken herhangi bir Analytics raporu planlayın:
- Wear OS uygulamasından veya diğer metriklerden kullanım istatistiklerini bildirmek istiyorsanız
requiresCharging
kısıtlamasıyla WorkManager'ı kullanın.
- Wear OS uygulamasından veya diğer metriklerden kullanım istatistiklerini bildirmek istiyorsanız
- Güncellemeleri, kol saati şarj olurken ve kablosuz ağ kullanırken yapılacak şekilde planlama:
- Yüklü kadranların sürümlerini kontrol edip otomatik olarak güncelleyebilirsiniz. Yine,
requiresCharging
kısıtlamasını verequiresNetworkType
içinUNMETERED
ağ türünü kullanın. - Şarjdayken cihazın kablosuz ağa erişimi olabilir. Güncellenen APK'ları hızlıca indirmek için Wi-Fi isteyin ve işlem tamamlandığında ağı serbest bırakın.
- Pazar yerinin günün saat yüzünü sunduğu durumlarda da aynı yönergeler geçerlidir. Bu saat yüzünü, kol saati şarj olurken önceden indirin.
- Yüklü kadranların sürümlerini kontrol edip otomatik olarak güncelleyebilirsiniz. Yine,
- Etkin kadranı kontrol etmek için iş planlamayın:
- Pazar yerinizin etkin bir saat yüzü olup olmadığını ve hangi saat yüzünün etkin olduğunu düzenli olarak kontrol etmek pilin boşalmasına neden olur. Bu yaklaşımdan kaçının.
- Saatte bildirimleri kullanmayın:
- Uygulamanız bildirim kullanıyorsa bunları telefona odaklayın. Kullanıcı işlemi, yolculuğa devam etmek için telefon uygulamasını açar. Bunların
setLocalOnly
kullanılarak kol saati uygulamasına aktarılmadığından emin olun.
- Uygulamanız bildirim kullanıyorsa bunları telefona odaklayın. Kullanıcı işlemi, yolculuğa devam etmek için telefon uygulamasını açar. Bunların
Önbelleğe alınıyor
Standart pazar yeri örneğinde, saat yüzleri telefondan kol saatine aktarılır. Bu bağlantı genellikle Bluetooth bağlantısıdır ve oldukça yavaş olabilir.
Hem daha iyi bir kullanıcı deneyimi sunmak hem de yeniden iletim gücünden tasarruf etmek için Wear OS cihazında birkaç APK'yı depolayacak küçük bir önbellek uygulayabilirsiniz.
Kullanıcı başka bir saat yüzü denedikten sonra daha önce seçtiği saat yüzüne geri dönmeye karar verirse bu işlem neredeyse anında gerçekleşir.
Benzer şekilde, bu özellik günün kadranı için önbelleğe alma veya Wear OS cihaz şarj olurken kadranların indirildiği benzer düzenler için de kullanılabilir.
Paketlenmiş kadranları güncelleme
Uygulamanız, daha önce açıklandığı gibi varsayılan bir kadran öğesi içerebilir. Bu saat kadranı, pazar yeri uygulamanız yüklendiğinde sisteme yüklenir. Ancak pazar yeri uygulamanızın güncellenmesiyle birlikte daha yeni bir sürüm eklenirse saat kadranı güncellenmez.
Bu durumu ele almak için pazar yeri uygulamanız MY_PACKAGE_REPLACED
yayın işlemini dinlemeli ve paket öğelerinden paketlenmiş bir kadranı güncelleme ihtiyacını kontrol etmelidir.
Temsili varsayılan kadran
Varsayılan kadran, kullanıcılarınızın pazar yerinizi keşfetmesine ve kullanmasına yardımcı olmanın harika bir yoludur. Kadran, pazar yeriniz yüklendiğinde yüklenir. Böylece kullanıcılar, kadran galerisinde bu kadranı bulabilir.
Varsayılan saat yüzleriyle çalışırken dikkat edilmesi gereken bazı noktalar:
- Kullanıcı, pazar yeri uygulamanızdan bir kadranı kaldırmayı seçerse
removeWatchFace
kullanmayın. Bunun yerine, bu durumdaupdateWatchFace
kullanarak kadranı varsayılan kadran olarak geri döndürün. Bu, kullanıcıların kadranınızı bulmasına ve galeriden ayarlamasına yardımcı olur. - Varsayılan kadranı logonuz ve temalarınızla basit ve anında tanınabilir hale getirin. Bu sayede kullanıcılar, kadran galerisinde kadranınızı bulabilir.
Telefon uygulamasını açmak için varsayılan saat yüzüne bir düğme ekleyin. Bu işlem iki aşamada gerçekleştirilebilir:
Wear OS uygulamasını kullanarak bir amaç başlatmak için kadranınıza
Launch
öğesi ekleyin. Örneğin:<Launch target="com.myapp/com.myapp.LaunchOnPhoneActivity" />
LaunchOnPhoneActivity
bölümünde,RemoteActivityHelper
simgesini kullanarak telefon uygulamasını başlatın.