Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Akkubenachrichtigung
Wenn ein Provider mehrere Komponenten umfasst, kann es hilfreich sein, den
Suche nach dem Akkuladestand der einzelnen Komponenten. Ein Beispiel:
wenn ein Kopfhörer-Case geöffnet ist und der Seeker den Akkustand für
und das Lade-Case selbst.
Zu diesem Zweck kann ein Dienstleister zusätzliche Informationen in die
Werbung, die auf den Kontodaten über die Funktion „Schnelles Pairing“ aufbaut, die im Artikel
Werbung: Wenn nicht sichtbar:
Zusätzlich zu den Kontodaten muss der Dienstleister ein zusätzliches Feld hinzufügen.
und gibt die Akkuwerte an. Das Paket muss Folgendes enthalten:
Oktett |
Datentyp |
Beschreibung |
Wert |
Obligatorisch? |
0 |
uint8 |
Flags |
0 x 00 (alle Bits für eine zukünftige Verwendung reserviert) |
Obligatorisch |
1 – s |
|
Kontoschlüsseldaten |
Obligatorisch |
|
S + 1 |
uint8 |
Länge und Typ des Akkus 0bLLLLTTTT- L = Anzahl der Akkuwerte
- T = Typ
|
0bLLLLTTT
- length = 0b0011 = 3 Werte für Akkus
- type = 0b0011 (UI-Anzeige anzeigen) oder 0b0100 (UI-Anzeige ausblenden)
|
Optional |
s + 2, s + 3, s + 4 |
uint8 |
Akkuwerte 0bSVVVVVVV- S = Status (wird geladen oder wird nicht geladen)
- V = Wert
- Die Akkuwerte sollten so angeordnet werden, wie der linke Kopfhörer (s + 2), der rechte Kopfhörer (s + 3) und das Case (s + 4).
|
0bSVVVVVVV
- status = 0b1 (wird geladen) oder 0b0 (wird nicht geladen)
- value = Akkustand zwischen 0 und 100 %, 0bS1111111 für unbekannt.
|
Optional |
Um Manipulationen zu verhindern, müssen die obigen Kontoschlüsseldaten leicht
geändert, um Akkuinformationen anzuzeigen, wenn die Akkuwerte enthalten sind
in der Anzeige. Beim Erstellen des Kontoschlüssels
Filter, wird der Wert V durch Kombinieren des Kontos
mit einem Salt versehen. Wenn stattdessen auch Akkuinformationen beworben werden,
muss der Wert V so konstruiert werden:
- Generieren Sie einen Wert V, wobei Folgendes gilt:
<ph type="x-smartling-placeholder">
</ph>
- Die ersten 16 Byte sind K.
- Die nächsten Bytes sind Salt.
- Die verbleibenden Byte sind die Akkuinformationen (von s + 1 bis s + 4).
einschließlich Länge und Typbyte aus der obigen Tabelle).
Wie im Feld für die Länge und den Akkutyp oben angemerkt, können Sie
0b0011
oder 0b0100
.
- 0b0011 – Zu verwenden, wenn der Anbieter möchte, dass der Seeker eine Angabe im
Benutzeroberfläche der Akkuwerte
- 0b0100 – Verwenden Sie diese Option, wenn der Anbieter möchte, dass der Seeker die Angabe blendet, wenn sie
wird bereits angezeigt.
Ein häufiger Anwendungsfall hierfür ist die Verwendung von 0b0011
, wenn der Fall geöffnet und
0b0100
, wenn die Kopfhörer aus dem Lade-Case entfernt wurden oder wieder geschlossen wurden.
//The sample code demonstrates that the headset only reports the battery level.
#define FASTPAIR_ACCOUNT_KEY_SIZE 16
// In the sample code, the size of salt is 2 bytes.
#define SALT_SIZE 2
// 1st byte - Battery level length and type
// 2nd~4th bytes - Battery values
#define BAT_LEVEL_SIZE 3
uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE + BAT_LEVEL_SIZE + 1] = {0};
int v_index = 0;
// The first 16 bytes are K.
uint8_t K[FASTPAIR_ACCOUNT_KEY_SIZE] = {0};
fastpair_get_account_key_by_index(keyIndex, K);
memcpy(V, K, FASTPAIR_ACCOUNT_KEY_SIZE);
v_index = v_index + FASTPAIR_ACCOUNT_KEY_SIZE;
// The next byte is the Salt.
uint8_t randomSalt = (uint8_t)rand();
V[v_index] = randomSalt;
v_index = v_index + SALT_SIZE;
// The remaining bytes are the battery information (from s + 1 to s + 4 including the length and type bytes).
uint8_t battery_level_len = 0;
uint8_t battery_level[BAT_LEVEL_SIZE] = {0};
fastpair_get_bat_level(&battery_level_len, battery_level);
// type = 0b0011 (show UI indication) or 0b0100 (hide UI indication)
V[v_index] = (battery_level_len << 4 | (is_show_ui ? 0x3 : 0x4));
v_index = v_index + 1;
for (int idx = 0; idx < battery_level_len; idx++) {
V[v_index++] = battery_level[idx];
}
Um eine Nachverfolgung zu verhindern, sollte der Anbieter keine Akku-Rohdaten in die
Werbung schalten. Sie kann stattdessen über RFCOMM gesendet werden, wenn eine Verbindung zu
Für Seeker siehe Nachrichtenstream: Geräteinformationen.
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-08-13 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-13 (UTC)."],[[["\u003cp\u003eProviders can include battery information for multiple components (e.g., earbuds and case) in the advertisement data using a specific format.\u003c/p\u003e\n"],["\u003cp\u003eThe advertisement data includes battery levels for each component and flags to control UI indication on the Seeker device.\u003c/p\u003e\n"],["\u003cp\u003eTo prevent tampering, the Account Key Data is modified to include battery information, requiring a specific construction process.\u003c/p\u003e\n"],["\u003cp\u003eProviders can choose to show or hide battery information in the Seeker's UI based on user interaction (e.g., case opening/closing).\u003c/p\u003e\n"],["\u003cp\u003eTo prevent tracking, raw battery data should not be constantly advertised but can be sent securely via RFCOMM after connection.\u003c/p\u003e\n"]]],[],null,["### Battery Notification\n\n| **Note:** Google recommends implementing the [Cryptographic Test Cases](/nearby/fast-pair/specifications/appendix/cryptotestcases \"Link to the Cryptographic Test Cases.\") to ease verification of these requirements.\n\nWhen a Provider includes multiple components, it can be useful to notify the\nSeeker of the battery level for each component. One example of this would be\nwhen a earbuds case is opened and the Seeker needs to know the battery for\neach individual bud and the case itself.\n\nTo accomplish this, a Provider can include additional information in the\nadvertisement, built on top of the Fast Pair Account Data described in\n[Advertising: When not discoverable](/nearby/fast-pair/specifications/service/provider#AdvertisingWhenNotDiscoverable \"Advertizing when not Discoverable\").\n\nIn addition to the Account Data, the Provider should include an additional field\nspecifying the battery values. The packet shall contain the following:\n\n| Octet | Data type | Description | Value | Mandatory? |\n|-----------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|------------|\n| 0 | `uint8` | Flags | 0x00 (all bits reserved for future use) | Mandatory |\n| 1 - *s* | | Account Key Data | Mandatory | |\n| *s + 1* | `uint8` | Battery level length and type 0bLLLLTTTT - L = Number of battery values - T = type | 0bLLLLTTTT - length = 0b0011 = 3 battery values - type = 0b0011 (show UI indication) or 0b0100 (hide UI indication) | Optional |\n| *s + 2* , *s + 3* , *s + 4* | `uint8` | Battery values 0bSVVVVVVV - S = status (charging or not charging) - V = value - The battery values should be ordered as left bud (*s + 2* ), right bud (*s + 3* ) and case (*s + 4*). | 0bSVVVVVVV - status = 0b1 (charging) or 0b0 (not charging) - value = battery level ranging from 0 to 100 percent, 0bS1111111 for unknown. | Optional |\n\nTo prevent tampering, the Account Key Data above shall be slightly\nmodified to include battery information when the battery values are included\nin the advertisement. Normally, when building the [account key\nfilter](/nearby/fast-pair/specifications/service/provider#AccountKeyFilter \"Account Key Filter\"), a value *V* is produced by combining the account\nkey with a salt. Instead, when battery information is also being advertised, the\nvalue *V* should be constructed as follows:\n\n1. Produce a value *V* , where:\n 1. The first 16 bytes are *K*.\n 2. The next bytes are the [Salt](/nearby/fast-pair/specifications/service/provider#SaltField \"Salt Field\").\n 3. The remaining bytes are the battery information (from *s + 1* to *s + 4* including the length and type byte from the table above).\n\nAs noted in the battery length and type field above, the type can be either\n`0b0011` or `0b0100`.\n\n- 0b0011 - Use when the Provider wants the Seeker to show an indication in the UI of the battery values;\n- 0b0100 - Use when the Provider wants the Seeker to hide the indication if it is already showing.\n\nOne common use case for this is to use `0b0011` when the case has opened and\n`0b0100` when buds have been removed from the case or it has been closed again. \n\n //The sample code demonstrates that the headset only reports the battery level.\n\n #define FASTPAIR_ACCOUNT_KEY_SIZE 16\n\n // In the sample code, the size of salt is 2 bytes.\n #define SALT_SIZE 2\n\n // 1st byte - Battery level length and type\n // 2nd~4th bytes - Battery values\n #define BAT_LEVEL_SIZE 3\n\n uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE + BAT_LEVEL_SIZE + 1] = {0};\n int v_index = 0;\n\n // The first 16 bytes are K.\n uint8_t K[FASTPAIR_ACCOUNT_KEY_SIZE] = {0};\n fastpair_get_account_key_by_index(keyIndex, K);\n memcpy(V, K, FASTPAIR_ACCOUNT_KEY_SIZE);\n v_index = v_index + FASTPAIR_ACCOUNT_KEY_SIZE;\n\n // The next byte is the Salt.\n uint8_t randomSalt = (uint8_t)rand();\n V[v_index] = randomSalt;\n v_index = v_index + SALT_SIZE;\n\n // The remaining bytes are the battery information (from s + 1 to s + 4 including the length and type bytes).\n\n uint8_t battery_level_len = 0;\n uint8_t battery_level[BAT_LEVEL_SIZE] = {0};\n\n fastpair_get_bat_level(&battery_level_len, battery_level);\n\n // type = 0b0011 (show UI indication) or 0b0100 (hide UI indication)\n V[v_index] = (battery_level_len \u003c\u003c 4 | (is_show_ui ? 0x3 : 0x4));\n v_index = v_index + 1;\n\n for (int idx = 0; idx \u003c battery_level_len; idx++) {\n V[v_index++] = battery_level[idx];\n }\n\nTo prevent tracking, the Provider should not include raw battery data in the\nadvertisement all the time. It can instead be sent via RFCOMM when connected to\na Seeker, see [Message Stream: Device Information](/nearby/fast-pair/specifications/extensions/deviceinformation \"Message Stream: Device Information\")."]]