Veri sağlayıcı uygulamaları, bilgileri saat yüzüne gösteriyor komplikasyonlar, metin, dize, resim ve sayılar içeren alanları sağlayın.
Veri sağlayıcı hizmetleri,
Yararlı içerikler sunmak için ComplicationProviderService
doğrudan saat yüzüne gönderebilirsiniz.
Veri sağlayıcı projesi oluşturma
Bir projesi için aşağıdaki adımları uygulayın:
- Dosya > Yeni > Yeni proje.
- Proje Şablonu penceresinde Wear OS sekmesini tıklayın, Etkinlik Yok ve İleri'yi tıklayın.
- Projenizi Yapılandırın penceresinde projenize bir ad verin, ve Son'u tıklayın.
- Android Studio, veri sağlayıcınız için uygulama modülü içeren bir proje oluşturur. Daha fazla daha fazla bilgi edinmek için bkz. Proje oluşturun.
- Veri sağlayıcı uygulamanızı kullanmaya başlamak için
BroadcastReceiver
değerleridir. Bu sınıfın amacı, Wear OS sisteminden gelen komplikasyon güncelleme istekleri. Ek olarak, daha kapsamlı, Veri sağlamak içinComplicationProviderService
uygun komplikasyonların istediği şekilde oluşturabilirsiniz. Daha fazla bilgi için aşağıdaki konulara bakın:- Güncelleme istekleri için bir yöntem uygulama
ComplicationTapBroadcastReceiver
ve Aşağıdaki codelab'deCustomComplicationProviderService
sınıf: Wear OS'te kadran komplikasyonlarına veri göstermeComplicationToggleReceiver
,LongTextProviderService
, ve diğer sınıflar için test paketi örneği
Not: Veri sağlayıcınız için etkinlik ekleme isteğe bağlıdır. Örneğin, yalnızca kullanıcı bir bir sorun olabilir.
Güncelleme istekleri için bir yöntem uygulama
Komplikasyon verileri gerektiğinde Wear OS sistemi, verilerinize güncelleme istekleri gönderir
sağlar. İsteklerin alınması
BroadcastReceiver
değerleridir. Güncelleme isteklerine yanıt vermek için:
veri sağlayıcınız,
ComplicationProviderService
için onComplicationUpdate()
yöntemi
sınıfını kullanır.
Wear OS sistemi, cihazınızdan veri alması gerektiğinde onComplicationUpdate()
adlı cihazı çağırır
(örneğin, sağlayıcınızı kullanan bir komplikasyon olduğunda)
veya belirli bir süre geçtiğinde yapabilirsiniz.
Bir
parametresi olarak ComplicationManager
nesnesini
onComplicationUpdate
, verileri sisteme geri göndermek için kullanılır.
Not: Veri sağlayıcı uygulamanız veri sağladığında kadran, , bilgiyi çizebilmek için gönderdiğiniz ham değerleri alır.
Aşağıdaki kod snippet'i,
onComplicationUpdate
yöntem:
Kotlin
override fun onComplicationUpdate( complicationId: Int, dataType: Int, complicationManager: ComplicationManager) { Log.d(TAG, "onComplicationUpdate() id: $complicationId") // Used to create a unique key to use with SharedPreferences for this complication. val thisProvider = ComponentName(this, javaClass) // Retrieves your data; in this case, grabs an incrementing number from SharedPrefs. val preferences = getSharedPreferences(ComplicationTapBroadcastReceiver.COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY, 0) val number = preferences.getInt( ComplicationTapBroadcastReceiver.getPreferenceKey( thisProvider, complicationId), 0) val numberText = String.format(Locale.getDefault(), "%d!", number) var complicationData: ComplicationData? = null when (dataType) { ComplicationData.TYPE_SHORT_TEXT -> complicationData = ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT) .setShortText(ComplicationText.plainText(numberText)) .build() else -> if (Log.isLoggable(TAG, Log.WARN)) { Log.w(TAG, "Unexpected complication type $dataType") } } if (complicationData != null) { complicationManager.updateComplicationData(complicationId, complicationData) } else { // If no data is sent, we still need to inform the ComplicationManager, so // the update job can finish and the wake lock isn't held any longer. complicationManager.noUpdateRequired(complicationId) } }
Java
@Override public void onComplicationUpdate( int complicationId, int dataType, ComplicationManager complicationManager) { Log.d(TAG, "onComplicationUpdate() id: " + complicationId); // Used to create a unique key to use with SharedPreferences for this complication. ComponentName thisProvider = new ComponentName(this, getClass()); // Retrieves your data; in this case, grabs an incrementing number from SharedPrefs. SharedPreferences preferences = getSharedPreferences( ComplicationTapBroadcastReceiver.COMPLICATION_PROVIDER_PREFERENCES_FILE_KEY, 0); int number = preferences.getInt( ComplicationTapBroadcastReceiver.getPreferenceKey( thisProvider, complicationId), 0); String numberText = String.format(Locale.getDefault(), "%d!", number); ComplicationData complicationData = null; switch (dataType) { case ComplicationData.TYPE_SHORT_TEXT: complicationData = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT) .setShortText(ComplicationText.plainText(numberText)) .build(); break; default: if (Log.isLoggable(TAG, Log.WARN)) { Log.w(TAG, "Unexpected complication type " + dataType); } } if (complicationData != null) { complicationManager.updateComplicationData(complicationId, complicationData); } else { // If no data is sent, we still need to inform the ComplicationManager, so // the update job can finish and the wake lock isn't held any longer. complicationManager.noUpdateRequired(complicationId); } }
Manifest beyanları ve izinleri
Veri sağlayıcı uygulamalarının uygulama manifest dosyalarında belirli beyanlar içermesi gerekir: Android sistemi tarafından bir veri sağlayıcı. Bu bölümde, projenizin başarılı olması için veri sağlayıcı uygulamaları.
Uygulamanızın manifest dosyasında hizmeti bildirin ve güncelleme isteği işlemi intent filtresi ekleyin.
Manifest, BIND_COMPLICATION_PROVIDER
yalnızca Wear OS sisteminin sağlayıcı hizmetlerine bağlanabilmesini sağlamak için gerekli izni almış olursunuz.
Ayrıca, android:icon
Sağlayan service
öğesi
tek renkli beyaz simge. Simgeler için vektör çizimlerini öneririz.
Simge, sağlayıcıyı temsil eder ve sağlayıcıda gösterilir
seçici.
Aşağıda bununla ilgili bir örnek verilmiştir:
<service android:name=".provider.IncrementingNumberComplicationProviderService" android:icon="@drawable/icn_complications" android:label="@string/complications_provider_incrementing_number" android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER"> <intent-filter> <action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/> </intent-filter> </service>
Meta veri öğelerini belirtin
Manifest dosyanıza, desteklenen türleri belirtmek için meta veriler ekleyin, aşağıda gösterildiği gibi, güncelleme dönemini ve yapılandırma işlemini örnek:
<meta-data android:name="android.support.wearable.complications.SUPPORTED_TYPES" android:value="RANGED_VALUE,SHORT_TEXT,LONG_TEXT" /> <meta-data android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS" android:value="300" />
Özellik verisi sağlayıcınız etkin olduğunda
UPDATE_PERIOD_SECONDS
,
güncelleme olup olmadığını kontrol eder. Burada gösterilen bilgiler
düzenli olarak güncellenmesi gerekmez. Örneğin,
push güncellemeleri kullanıyorsanız bu değeri
0
.
UPDATE_PERIOD_SECONDS
değerini 0
olarak ayarlamazsanız
en az 300
(5 dakika) değerinde bir değer kullanmalısınız.
korumak için sistemin uyguladığı minimum güncelleme süresini
cihazın pil ömrünü uzatın. Ayrıca, güncelleme isteklerinin
Bu durum, cihaz ambiyans modundayken veya üzerinde kullanılmıyorken daha az sıklıkla görülür.
Güncelleme gönderme hakkında daha fazla bilgi edinmek için
ComplicationProviderService
sınıfı
Wear OS API'si
Referans.
Yapılandırma etkinliği ekleme
Gerekirse sağlayıcı şu özelliklere sahip bir yapılandırma etkinliği ekleyebilir: Kullanıcı bir veri sağlayıcı seçtiğinde kullanıcıya gösterilir. To dahil etmek için sağlayıcı hizmetine meta veri öğesi dahil etme beyanını aşağıdaki anahtarı kullanarak yükleyin:
<meta-data android:name="android.support.wearable.complications.PROVIDER_CONFIG_ACTION" android:value="PROVIDER_CONFIG_ACTION"/>
Değer, herhangi bir işlem olabilir.
Ardından, amaca yönelik filtre kullanarak yapılandırma etkinliğini
eyleme dökülebilir. Yapılandırma etkinliği
sağlar. Yapılandırma etkinliği, RESULT_OK
veya
RESULT_CANCELED
veya Google'ın e-posta adresi gibi
ayarlanmalıdır.
Sağlayıcı tarafından belirlenen güvenli kadranlar
Sağlayıcılar belirli kadranları "güvenli" olarak belirtebilir almak için dışı verilerdir. Bu seçenek yalnızca kadran, sağlayıcıyı varsayılan olarak kullanmak için ve sağlayıcının kadran uygulamasına güvenmesi.
Sağlayıcı, kadranların güvenli olduğunu bildirmek için meta verileri şu anahtarla ekler:
android.support.wearable.complications.SAFE_WATCH_FACES
İlgili içeriği oluşturmak için kullanılan
meta veri değeri,
WatchFaceService
bileşen adları,
ComponentName.flattenToString()
çağrılır veya
uygulama paketi adlarını içerir. Bu durumda,
belirtilen uygulamanın güvenli olarak kabul edildiği. Değer listesindeki boşluk yoksayılır. Örnek:
<meta-data android:name="android.support.wearable.complications.SAFE_WATCH_FACES" android:value=" com.app.watchface/com.app.watchface.MyWatchFaceService, com.anotherapp.anotherwatchface/com.something.WatchFaceService, com.something.text"/>
Yanmaya uygun görüntüler sağlayın
Yanmaya duyarlı ekranlarda, sabit renk bloklarından kaçınılmalıdır. ambiyans modu. Simgelerinizde veya resimlerinizde düz renk blokları varsa güvenli bir sürüm de sunabilir.
Şunu kullanarak bir simge sağladığınızda:
ComplicationData.Builder#setIcon
, yerleşik olarak kullanılabilen bir sürüm içerir
kullanarak
ComplicationData.Builder#setBurnInProtectionIcon
)
Şunu kullanarak bir resim sağladığınızda:
ComplicationData.Builder#setSmallImage
, yerleşik olarak kullanılabilen bir sürüm içerir
kullanarak
ComplicationData.Builder#setBurnInProtectionSmallImage
)
Push güncellemelerini kullanma
Bir
Uygulamanızın manifest dosyasındaki bir komplikasyonsa,
Güncellemeleri dinamik olarak istemek için ComplicationDataSourceUpdateRequester
.
Özellikte kullanıcının görebildiği içeriğin güncellenmesini istemek için şu numarayı arayın:
requestUpdate()
Dikkat: Cihazın pil ömrünü korumak için
şu örneğinizden requestUpdate()
öğesini çağırmayın:
Her 5 dakikadan ComplicationDataSourceUpdateRequester
daha sık
ortalaması.
Dinamik değerler sağlama
Wear OS 4'ten itibaren bazı komplikasyonlar daha sık yenilenen değerler gösterebilir
. Bu olanağı sunarak
kullanmak için
Şu alanları kabul eden ComplicationData
alanları:
dinamik değerlere sahip olduğundan emin olun. Platform, hedefleri
bu değerleri, özellik sağlayıcının çalışmasına gerek kalmadan sıklıkla günceller.
Örnek alanlar şunları içerir:
GoalProgressComplicationData
öğesinin dinamik değer alanı ve
DynamicComplicationText
ComplicationText
alanını kullanın. Bu dinamik değerler,
androidx.wear.protolayout.expression
kitaplığı.
Platform belirli durumlarda dinamik değerleri değerlendiremez:
- Dinamik değer bazen kullanılamayabilir: Bu durum, örneğin
Cihaz bileğinize takılı değil. Böyle durumlarda platform,
dinamik değeri geçersiz kılma yedek alanına
NoDataComplicationData
öğesinin yer tutucu alanı. - Dinamik değer hiçbir zaman kullanılamıyor: Bu durum
Wear OS 4'ün eski sürümü. Bu durumda, platform tamamlayıcı bir yedek alan kullanır.
örneğin:
getFallbackValue()
Zamana bağlı değerler sunma
Bazı özellikler, mevcut gerekir. Geçerli tarih, bir sonraki toplantıya kadar olan süre, veya başka bir saat dilimindeki saati seçebilirsiniz.
Bir özelliği şu sıklıkta güncelleme:
birkaç saniye veya bir dakika geçmesi gerekir. Bunun yerine
değerleri, zamana bağlı metin kullanarak geçerli tarihe veya saate göre ayarlayın.
ComplicationText
sınıfını kullanır.
Özellik güncelleme oranı
Özellikleri hızlı bir şekilde güncellemek isteyebilirsiniz. Ancak, bu işlem pili etkileyebilir cihazın kullanım ömrü boyunca görüntülenebilir. Ayrıcalıklı başka bir alan kullanmayı Komplikasyon isteği API'si, belirli özelliklerin daha sık güncellenmesini sağlar. Ancak, bu API'nin kullanımı saat üreticisi. Her saat üreticisi hangi komplikasyonların güncellenebileceğine hızlı bir şekilde hızlandırabilir.