Özelliklere verileri gösterme

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:

  1. Dosya > Yeni > Yeni proje.
  2. Proje Şablonu penceresinde Wear OS sekmesini tıklayın, Etkinlik Yok ve İleri'yi tıklayın.
  3. Projenizi Yapılandırın penceresinde projenize bir ad verin, ve Son'u tıklayın.
  4. 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.
  5. 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çin ComplicationProviderService uygun komplikasyonların istediği şekilde oluşturabilirsiniz. Daha fazla bilgi için aşağıdaki konulara bakın:

    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:

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.