Datenanbieter-Apps machen Informationen auf dem Zifferblatt sichtbar Zusatzfunktionen, Felder mit Text, Zeichenfolgen, Bildern und Zahlen angeben.
Ein Datenanbieterdienst erweitert
<ph type="x-smartling-placeholder"></ph>
ComplicationProviderService
, um nützliche
direkt auf dem Zifferblatt.
Datenanbieterprojekt erstellen
So erstellen Sie ein für Ihre Datenanbieter-App zu erstellen, führen Sie die folgenden Schritte aus:
- Klicken Sie auf Datei > Neu > Neues Projekt.
- Klicke im Fenster Project Template (Projektvorlage) auf den Tab „Wear OS“ und wähle Keine Aktivität und klicken Sie auf Weiter.
- Geben Sie im Fenster Projekt konfigurieren einen Namen für Ihr Projekt ein, füllen Sie Standard-Projektinformationen ein und klicken Sie auf Finish (Fertigstellen).
- Android Studio erstellt ein Projekt mit einem App-Modul für Ihren Datenanbieter. Weitere Informationen Informationen zu Projekten in Android Studio finden Sie unter Projekt erstellen
- Erstellen Sie eine neue Klasse, die Ihre Datenanbieter-App erweitert,
<ph type="x-smartling-placeholder"></ph>
BroadcastReceiver
Der Zweck dieser Klasse besteht darin, Updateanfragen für Zusatzfunktionen vom Wear OS-System gesendet werden. Erstellen Sie außerdem ein neue Klasse, die Ihre <ph type="x-smartling-placeholder"></ph>ComplicationProviderService
, um Daten bereitzustellen die von entsprechenden Komplikationen angefordert werden. Weitere Informationen finden Sie hier: <ph type="x-smartling-placeholder">- </ph>
- Methode für Aktualisierungsanfragen implementieren
- Die
ComplicationTapBroadcastReceiver
undCustomComplicationProviderService
im folgenden Codelab: <ph type="x-smartling-placeholder"></ph> Daten für Zusatzfunktionen von Zifferblatt auf Wear OS verfügbar machen ComplicationToggleReceiver
,LongTextProviderService
, und andere Klassen der <ph type="x-smartling-placeholder"></ph> Testsuite-Beispiel
Hinweis:Das Hinzufügen einer Aktivität für Ihren Datenanbieter optional. Angenommen, Sie möchten eine Aktivität, die nur gestartet wird, wenn die Nutzenden auf eine Komplikationen.
Methode für Aktualisierungsanfragen implementieren
Wenn Daten zu Zusatzfunktionen benötigt werden, sendet das Wear OS-System Aktualisierungsanfragen an deine Daten
Dienstanbieter. Die Anfragen gehen an Ihr
<ph type="x-smartling-placeholder"></ph>
BroadcastReceiver
Um auf Aktualisierungsanfragen zu reagieren,
muss Ihr Datenanbieter die
<ph type="x-smartling-placeholder"></ph>
Methode onComplicationUpdate()
des ComplicationProviderService
.
Das Wear OS-System ruft onComplicationUpdate()
auf, wenn es Daten von deinem
z. B. wenn bei der Nutzung Ihres Anbieters
aktiv sind oder eine festgelegte Zeitspanne verstreichen.
Sie übergibt eine
ComplicationManager
-Objekt als Parameter für
onComplicationUpdate
, mit dem Daten zurück an das System gesendet werden.
Hinweis:Wenn Ihre Datenanbieter-App Daten bereitstellt, zeigt das Zifferblatt die von Ihnen gesendeten Rohwerte, sodass es die Informationen abrufen kann.
Das folgende Code-Snippet zeigt eine Beispielimplementierung des
onComplicationUpdate
-Methode:
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); } }
Manifestdeklarationen und Berechtigungen
Apps von Datenanbietern müssen bestimmte Deklarationen im App-Manifest enthalten, damit sie als Datenanbieter durch das Android-System. In diesem Abschnitt werden die erforderlichen Einstellungen für Datenanbieter-Apps.
Deklarieren Sie im Manifest Ihrer App den Dienst und fügen Sie einen Intent-Filter für Aktualisierungsanfragen hinzu.
Außerdem muss das Manifest den Dienst durch Hinzufügen des BIND_COMPLICATION_PROVIDER
-Objekts schützen.
Berechtigung, um sicherzustellen, dass sich nur das Wear OS-System an Anbieterdienste binden kann.
Fügen Sie außerdem ein android:icon
-Attribut in den
service
-Element, das ein
einfarbiges weißes Symbol. Wir empfehlen Vektor-Drawables für die Symbole.
Das Symbol repräsentiert den Anbieter und wird im Anbieter angezeigt
-Auswahl.
Beispiel:
<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>
Metadatenelemente angeben
Füge deiner Manifestdatei Metadaten hinzu, um die unterstützten Typen anzugeben. Aktualisierungszeitraum und Konfigurationsaktion, wie unten dargestellt Beispiel:
<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" />
Wenn Ihr Datenanbieter für
Zusatzfunktionen aktiv ist,
UPDATE_PERIOD_SECONDS
gibt an, wie oft das Ereignis
um nach Aktualisierungen der Daten zu suchen. Wenn die Informationen in der
Zusatzfunktion nicht regelmäßig aktualisiert werden,
Push-Updates verwenden, setzen Sie diesen Wert auf
0
Wenn Sie UPDATE_PERIOD_SECONDS
nicht auf 0
festlegen,
Sie müssen einen Wert von mindestens 300
(5 Minuten) verwenden,
die vom System erzwungene Mindestaktualisierungsdauer, um
die Akkulaufzeit des Geräts. Beachten Sie außerdem, dass Aktualisierungsanfragen
erscheinen seltener, wenn sich das Gerät im Inaktivmodus befindet oder nicht getragen wird.
Weitere Informationen zum Senden von Updates finden Sie in den Schlüsseln für die
<ph type="x-smartling-placeholder"></ph>
ComplicationProviderService
in der
Wear OS API
Referenz.
Konfigurationsaktivität hinzufügen
Bei Bedarf kann ein Anbieter eine Konfigurationsaktivität hinzufügen, die dem Nutzer angezeigt werden, wenn er einen Datenanbieter auswählt. Um den Parameter Konfigurationsaktivität, fügen Sie ein Metadatenelement in den Providerdienst ein -Deklaration im Manifest mit dem folgenden Schlüssel an:
<meta-data android:name="android.support.wearable.complications.PROVIDER_CONFIG_ACTION" android:value="PROVIDER_CONFIG_ACTION"/>
Der Wert kann eine beliebige Aktion sein.
Erstellen Sie dann die Konfigurationsaktivität mit einem Intent-Filter dafür.
Aktion ausführen. Die Konfigurationsaktivität muss sich im selben Paket befinden wie die
Dienstanbieter. Die Konfigurationsaktivität muss RESULT_OK
oder
RESULT_CANCELED
, um dem System mitzuteilen,
festgelegt werden sollte.
Vom Anbieter angegebene sichere Zifferblätter
Anbieter können bestimmte Zifferblätter als „sicher“ festlegen um ihre Daten. Dies wird nur verwendet, wenn ein Zifferblatt versucht, um den Anbieter als Standardeinstellung zu verwenden, und der Anbieter der Zifferblatt-App vertraut.
Um Zifferblätter als sicher zu deklarieren, fügt der Anbieter Metadaten mit dem Schlüssel
android.support.wearable.complications.SAFE_WATCH_FACES
Die
metadata ist eine durch Kommas getrennte Liste mit entweder
<ph type="x-smartling-placeholder"></ph>
WatchFaceService
-Komponentennamen, die so angegeben werden
ComponentName.flattenToString()
wird aufgerufen oder
App-Paketnamen. In diesem Fall sind alle Zifferblätter innerhalb eines
angegebene App als sicher gilt. Leerzeichen in der Werteliste werden ignoriert. Beispiel:
<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"/>
Eingebrannte Bilder bereitstellen
Auf Bildschirmen, die ein Einbrennen verursachen können, sollten durchgehende Farbblöcke in Ambient-Modus zu wechseln. Wenn Ihre Symbole oder Bilder einfarbige Farbblöcke enthalten, bieten auch eine einbrennbare Version.
Wenn Sie mithilfe von
<ph type="x-smartling-placeholder"></ph>
ComplicationData.Builder#setIcon
, enthalten eine einbrennbare Version
mit
<ph type="x-smartling-placeholder"></ph>
ComplicationData.Builder#setBurnInProtectionIcon
Wenn Sie ein Bild mithilfe von
<ph type="x-smartling-placeholder"></ph>
ComplicationData.Builder#setSmallImage
, enthalten eine einbrennbare Version
mit
<ph type="x-smartling-placeholder"></ph>
ComplicationData.Builder#setBurnInProtectionSmallImage
Push-Updates verwenden
Als Alternative zur Angabe eines konstanten Aktualisierungsintervalls ungleich null für ein
im Manifest Ihrer App angezeigt wird, können Sie
<ph type="x-smartling-placeholder"></ph>
ComplicationDataSourceUpdateRequester
, um Aktualisierungen dynamisch anzufordern.
Um eine Aktualisierung des für den Nutzer sichtbaren Inhalt der Zusatzfunktion anzufordern, rufen Sie
requestUpdate()
Achtung:Um die Akkulaufzeit Ihres Geräts zu verlängern,
ruf requestUpdate()
nicht von deiner Instanz von aus auf
ComplicationDataSourceUpdateRequester
häufiger als alle 5 Minuten am
Durchschnitt.
Dynamische Werte angeben
Ab Wear OS 4 können bei einigen Zusatzfunktionen Werte angezeigt werden, die häufiger aktualisiert werden
basierend auf Werten, die direkt für die Plattform verfügbar sind. Um diese Fähigkeit in
die Zusatzfunktionen nutzen,
<ph type="x-smartling-placeholder"></ph>
ComplicationData
-Felder, die akzeptiert werden:
dynamische Werte. Die Plattform wertet und evaluiert
aktualisiert diese Werte häufig, ohne dass der Zusatzdienstanbieter ausgeführt werden muss.
Beispiele für Felder:
<ph type="x-smartling-placeholder"></ph>
das dynamische Wertfeld von GoalProgressComplicationData
und
<ph type="x-smartling-placeholder"></ph>
DynamicComplicationText
, die in jedem
ComplicationText
eingeben. Diese dynamischen Werte basieren auf dem
<ph type="x-smartling-placeholder"></ph>
androidx.wear.protolayout.expression
.
In bestimmten Situationen kann die Plattform dynamische Werte nicht auswerten:
- Der dynamische Wert ist manchmal nicht verfügbar , beispielsweise wenn das Attribut
Gerät nicht am Handgelenk getragen wird. In diesen Fällen verwendet die Plattform den Wert
der
<ph type="x-smartling-placeholder"></ph>
Fallback-Feld für die Entwertung dynamischer Werte in einer
<ph type="x-smartling-placeholder"></ph>
Platzhalterfeld von
NoDataComplicationData
. - Dynamischer Wert ist nie verfügbar : Dies geschieht auf einem Gerät,
ältere Version von Wear OS 4. In diesem Fall verwendet die Plattform ein Companion-Fallback-Feld,
zum Beispiel
getFallbackValue()
Zeitabhängige Werte angeben
Bei einigen Zusatzfunktionen muss ein Wert angezeigt werden, der sich auf den aktuellen . Beispiele hierfür sind das aktuelle Datum, die Zeit bis zum nächsten Meeting, oder die Uhrzeit in einer anderen Zeitzone.
Zusatzfunktion nicht jedes Mal aktualisieren
um diese Werte auf dem neuesten Stand zu halten. Geben Sie stattdessen an,
mit zeitabhängigem Text die Werte relativ zum aktuellen Datum oder zur aktuellen Uhrzeit anzeigen.
Sie können Builder in der
ComplicationText
, um diese zeitabhängigen Werte zu erstellen.
Aktualisierungsrate der Zusatzfunktion
Möglicherweise möchten Sie Zusatzfunktionen schnell aktualisieren. Dies kann sich jedoch auf den Akku auswirken. Lebensdauer des Geräts. Sie können eine privilegierte <ph type="x-smartling-placeholder"></ph> Complication Request API, mit dem bestimmte Zusatzfunktionen häufiger aktualisiert werden können. Die Verwendung dieser API muss jedoch zulässig sind, Hersteller der Uhr. Jeder Uhrenhersteller entscheidet, welche Zusatzfunktionen aktualisiert werden können, schneller als normalerweise zulässig.
Weitere Informationen
- <ph type="x-smartling-placeholder"></ph> Typen und Felder
- <ph type="x-smartling-placeholder"></ph> Wear OS-Beispiel-Repository
- <ph type="x-smartling-placeholder"></ph> Codelab: Daten für Zusatzfunktionen von Zifferblättern unter Wear OS verfügbar machen