Zum Sicherheitscenter weiterleiten
Jede App kann das Sicherheitscenter über das
Aktion „android.content.Intent.ACTION_SAFETY_CENTER
“ (Stringwert)
android.intent.action.SAFETY_CENTER
).
Wenn Sie das Sicherheitscenter öffnen möchten, starten Sie einen Anruf von einer Activity
-Instanz aus:
Intent openSafetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER);
startActivity(openSafetyCenterIntent);
Weiterleitung zu einem bestimmten Problem
Sie können auch über
mit bestimmten Absichtsmerkmalen. Diese Extras sind nicht zur Nutzung durch Dritte gedacht.
Sie gehören zu SafetyCenterManager
, das wiederum zu @SystemApi
gehört. Nur
System-Apps auf diese Extras zugreifen können.
Intent-Extras, die zu einer bestimmten Warnungskarte weiterleiten:
EXTRA_SAFETY_SOURCE_ID
- Stringwert:
android.safetycenter.extra.SAFETY_SOURCE_ID
- String type: Gibt die ID der Sicherheitsquelle der zugehörigen Warnkarte
- Erforderlich, damit die Weiterleitung zum Problem funktioniert
- Stringwert:
EXTRA_SAFETY_SOURCE_ISSUE_ID
- Stringwert:
android.safetycenter.extra.SAFETY_SOURCE_ISSUE_ID
- Stringtyp: Gibt die ID der Warnungskarte an
- Erforderlich, damit die Weiterleitung zum Problem funktioniert
- Stringwert:
EXTRA_SAFETY_SOURCE_USER_HANDLE
- Stringwert:
android.safetycenter.extra.SAFETY_SOURCE_USER_HANDLE
- Typ
UserHandle
: gibtUserHandle
für die zugehörige Warnung an Infokarte - Optional (Standardeinstellung ist der aktuelle Nutzer)
- Stringwert:
Das folgende Code-Snippet kann aus einer Activity
-Instanz heraus verwendet werden, um
Sicherheitscenter zu einem bestimmten Problem:
UserHandle theUserHandleThisIssueCameFrom = …;
Intent openSafetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER)
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID, "TheSafetySourceIdThisIssueCameFrom")
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID, "TheSafetySourceIssueIdToRedirectTo")
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCE_USER_HANDLE, theUserHandleThisIssueCameFrom);
startActivity(openSafetyCenterIntent);
Auf eine bestimmte Unterseite weiterleiten (ab Android 14)
Ab Android 14 ist das Sicherheitscenter
in mehrere Unterseiten unterteilen, die die verschiedenen SafetySourcesGroup
(in
Android 13 wird dies als minimierbare Einträge angezeigt.
Mit folgendem Intent können Nutzer auf eine bestimmte Unterseite weitergeleitet werden:
EXTRA_SAFETY_SOURCES_GROUP_ID
- Stringwert:
android.safetycenter.extra.SAFETY_SOURCES_GROUP_ID
- Stringtyp: Gibt die ID von
SafetySourcesGroup
an - Erforderlich für die Weiterleitung zur Unterseite
- Stringwert:
Das folgende Code-Snippet kann aus einer Activity
-Instanz heraus verwendet werden, um
vom Sicherheitscenter zu einer bestimmten Unterseite zu wechseln:
Intent openSafetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER)
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCES_GROUP_ID, "TheSafetySourcesGroupId");
startActivity(openSafetyCenterIntent);
Quell-APIs des Sicherheitscenters verwenden
Die Quell-APIs des Sicherheitscenters sind verfügbar mit
SafetyCenterManager
(@SystemApi
). Code für die API-Oberfläche ist verfügbar in
Code
Suchen
Der Implementierungscode der APIs ist verfügbar unter Code
Suchen.
Berechtigungen
Auf die Quell-APIs des Sicherheitscenters kann nur über System-Apps auf der Zulassungsliste zugegriffen werden mit den unten aufgeführten Berechtigungen. Weitere Informationen finden Sie unter Privilegiert Berechtigungsliste.
READ_SAFETY_CENTER_STATUS
signature|privileged
- Wird für die
SafetyCenterManager#isSafetyCenterEnabled()
API verwendet (nicht für Sicherheitscenter-Quellen benötigt,SEND_SAFETY_CENTER_UPDATE
) - Wird von System-Apps verwendet, die prüfen, ob das Sicherheitscenter aktiviert ist
- Nur für System-Apps auf der Zulassungsliste gewährt
SEND_SAFETY_CENTER_UPDATE
internal|privileged
- Wird für die aktivierte API und die Safety Resources API verwendet
- Nur von Sicherheitsquellen verwendet
- Nur für System-Apps auf der Zulassungsliste gewährt
Diese Berechtigungen sind privilegiert. Sie können sie nur erhalten, wenn Sie sie zu
die relevante Datei enthält, zum Beispiel die
com.android.settings.xml
für die App „Einstellungen“ und in die Datei AndroidManifest.xml
der App. Weitere Informationen finden Sie unter
protectionLevel
finden Sie weitere Informationen
zum Berechtigungsmodell.
SafetyCenterManager herunterladen
SafetyCenterManager
ist eine @SystemApi
-Klasse, auf die über System-Apps zugegriffen werden kann
ab Android 13. Dieser Aufruf zeigt, wie Sie
SafetyCenterManager herunterladen:
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
// Must be on T or above to interact with Safety Center.
return;
}
SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class);
if (safetyCenterManager == null) {
// Should not be null on T.
return;
}
Prüfen, ob das Sicherheitscenter aktiviert ist
Bei diesem Anruf wird geprüft, ob das Sicherheitscenter aktiviert ist. Für den Aufruf ist entweder die Methode
READ_SAFETY_CENTER_STATUS
oder die Berechtigung SEND_SAFETY_CENTER_UPDATE
:
boolean isSafetyCenterEnabled = safetyCenterManager.isSafetyCenterEnabled();
if (isSafetyCenterEnabled) {
// …
} else {
// …
}
Daten bereitstellen
Quelldaten des Sicherheitscenters mit den angegebenen String sourceId
werden der Sicherheitsabteilung zur Verfügung gestellt
Mitte mit dem SafetySourceData
-Objekt, das einen UI-Eintrag und einen
Liste der Probleme (Warnkarten). Der UI-Eintrag und die Warnkarten können
verschiedene Schweregrade, die in der Klasse SafetySourceData
angegeben sind:
SEVERITY_LEVEL_UNSPECIFIED
- Kein Schweregrad angegeben
- Farbe: Grau oder transparent (abhängig von den
SafetySourcesGroup
der Eintrag) - Wird für dynamische Daten verwendet, die sich als statische Einträge in der Benutzeroberfläche darstellen oder um ein nicht spezifizierter Eintrag
- Darf nicht für Warnkarten verwendet werden
SEVERITY_LEVEL_INFORMATION
- Grundlegende Informationen oder kleinerer Vorschlag
- Farbe: Grün
SEVERITY_LEVEL_RECOMMENDATION
- Empfehlung, dass der Nutzer Maßnahmen in Bezug auf dieses Problem ergreifen sollte, da es sie gefährden könnten,
- Farbe: Gelb
SEVERITY_LEVEL_CRITICAL_WARNING
- Kritische Warnung, dass der Nutzer in Bezug auf dieses Problem Maßnahmen ergreifen muss, da es stellt ein Risiko dar
- Farbe: Rot
SafetySourceData
Das SafetySourceData
-Objekt besteht aus einem UI-Eintrag, Warnkarten und
Invarianten.
- Optionale
SafetySourceStatus
-Instanz (UI-Eintrag) - Liste der
SafetySourceIssue
-Instanzen (Warnkarten) - Optionale Extras für
Bundle
(Ab 14) - Invarianten:
<ph type="x-smartling-placeholder">
- </ph>
- Die
SafetySourceIssue
-Liste muss Probleme mit eindeutigen Kennzeichnungen. - Die Instanz
SafetySourceIssue
darf keine höhere Bedeutung haben alsSafetySourceStatus
, wenn ein Wert vorhanden ist (es sei denn,SafetySourceStatus
istSEVERITY_LEVEL_UNSPECIFIED
, in diesem FallSEVERITY_LEVEL_INFORMATION
Probleme erlaubt sind). - Zusätzliche Anforderungen, die durch die API-Konfiguration auferlegt werden, müssen erfüllt sein.
Handelt es sich bei der Quelle beispielsweise nur um ein Problem, darf sie keine
SafetySourceStatus
-Instanz.
- Die
SafetySourceStatus
- Erforderlicher Titel für
CharSequence
- Erforderliche
CharSequence
-Zusammenfassung - Erforderlicher Schweregrad
- Optional
PendingIntent
Instanz, um den Nutzer auf die richtige Seite weiterzuleiten. Standardmäßig wirdintentAction
verwendet. aus der Konfiguration, falls vorhanden) - Optionales
IconAction
(wird als seitliches Symbol am Eintrag angezeigt) mit folgenden Elementen: <ph type="x-smartling-placeholder">- </ph>
- Erforderlicher Symboltyp. Es muss sich um einen der folgenden Typen handeln:
<ph type="x-smartling-placeholder">
- </ph>
ICON_TYPE_GEAR
: Wird als Zahnrad neben dem UI-Eintrag angezeigt.ICON_TYPE_INFO
: Wird als Informationssymbol neben dem UI-Eintrag angezeigt.
- Erforderlich
PendingIntent
Um den Nutzer auf eine andere Seite weiterzuleiten
- Erforderlicher Symboltyp. Es muss sich um einen der folgenden Typen handeln:
<ph type="x-smartling-placeholder">
- Optionaler boolescher
enabled
-Wert, der es ermöglicht, den UI-Eintrag als zu markieren deaktiviert, sodass es nicht anklickbar ist (Standardeinstellung isttrue
). - Invarianten:
<ph type="x-smartling-placeholder">
- </ph>
PendingIntent
Instanzen müssen eineActivity
-Instanz öffnen.- Wenn der Eintrag deaktiviert ist, muss er
SEVERITY_LEVEL_UNSPECIFIED
- Zusätzliche Anforderungen, die durch die API-Konfiguration auferlegt werden.
SafetySourceIssue
- Erforderliche eindeutige
String
-Kennung - Erforderlicher Titel für
CharSequence
- Optionaler Untertitel (
CharSequence
) - Erforderliche
CharSequence
-Zusammenfassung - Erforderlicher Schweregrad
- Optionale Problemkategorie, die einer der folgenden sein muss:
<ph type="x-smartling-placeholder">
- </ph>
ISSUE_CATEGORY_DEVICE
: Das Problem betrifft das Gerät des Nutzers.ISSUE_CATEGORY_ACCOUNT
: Das Problem betrifft die Konten des Nutzers.ISSUE_CATEGORY_GENERAL
: Das Problem wirkt sich auf die allgemeine Sicherheit des Nutzers aus. Das ist die Standardeinstellung.ISSUE_CATEGORY_DATA
(ab Android 14): Das Problem betrifft die Daten des Nutzers.ISSUE_CATEGORY_PASSWORDS
(Android wird gestartet) 14): Das Problem betrifft die Passwörter.ISSUE_CATEGORY_PERSONAL_SAFETY
(Android wird gestartet) 14): Das Problem betrifft die persönlichen Sicherheit.
- Liste mit
Action
-Elementen, die der Nutzer bei diesem Problem anwenden kann (jeweils) Die InstanzAction
besteht aus: <ph type="x-smartling-placeholder">- </ph>
- Erforderliche eindeutige
String
-Kennung - Erforderliches
CharSequence
-Label - Erforderlich
PendingIntent
um die Nutzenden auf eine andere Seite weiterzuleiten oder die Aktion direkt von Sicherheitscenter-Bildschirm - Optionaler boolescher Wert, der angibt, ob das Problem direkt behoben werden kann
Sicherheitscenter-Bildschirm (Standardeinstellung ist
false
) - Optionale
CharSequence
-Erfolgsnachricht, die dem Nutzer angezeigt wird Wenn das Problem direkt über das Sicherheitscenter behoben wurde Bildschirm
- Erforderliche eindeutige
- Optional
PendingIntent
Er wird aufgerufen, wenn der Nutzer das Problem schließt. Standardmäßig aufgerufen) - Erforderliche Kennzeichnung des Problemtyps
String
; ähnelt dies dem Problem Kennung, muss jedoch nicht eindeutig sein und wird für die Protokollierung verwendet. - Optionale
String
für die Deduplizierungs-ID, damit dieselbenSafetySourceIssue
aus verschiedenen Quellen und wird nur einmal im Benutzeroberfläche, bei der davon ausgegangen wird, dass sie denselbendeduplicationGroup
haben (Android wird gestartet) 14). Wenn nicht angegeben, tritt das Problem nie auf dedupliziert - Optionales
CharSequence
für den Quellenangabentitel. In diesem Text wird Folgendes angezeigt: Herkunft der Warnungskarte (Android wird gestartet) 14). Wenn nicht angegeben, wird der Titel desSafetySourcesGroup
- Optionale Bearbeitbarkeit von Problemen (ab Android 14)
Dieser muss einer der folgenden Werte sein:
<ph type="x-smartling-placeholder">
- </ph>
ISSUE_ACTIONABILITY_MANUAL
: Der Nutzer muss dieses Problem beheben. manuell. Das ist die Standardeinstellung.ISSUE_ACTIONABILITY_TIP
: Dies ist nur ein Tipp, der nicht unbedingt erforderlich ist. Nutzereingaben.ISSUE_ACTIONABILITY_AUTOMATIC
: Dieses Problem wurde bereits behoben und erfordert möglicherweise keine Nutzereingabe.
- Optionales Benachrichtigungsverhalten (Android wird gestartet)
14). Dabei muss es sich um einen der folgenden Werte handeln:
<ph type="x-smartling-placeholder">
- </ph>
NOTIFICATION_BEHAVIOR_UNSPECIFIED
: Das Sicherheitscenter entscheidet, für die Karte „Warnung“ erforderlich. Das ist die Standardeinstellung.NOTIFICATION_BEHAVIOR_NEVER
: Es wurde keine Benachrichtigung gepostet.NOTIFICATION_BEHAVIOR_DELAYED
: Es wird irgendwann eine Benachrichtigung gepostet. nachdem das Problem erstmals gemeldet wurde.NOTIFICATION_BEHAVIOR_IMMEDIATELY
: Eine Benachrichtigung wird gepostet, sobald das Problem gemeldet wurde.
- Optionales
Notification
zum Anzeigen einer benutzerdefinierten Benachrichtigung mit der Karte „Warnung“ (Ab Android 14). Wenn keine Angabe erfolgt, wird derNotification
wird von der Warnungskarte abgeleitet. Zusammensetzung: <ph type="x-smartling-placeholder">- </ph>
- Erforderlicher Titel für
CharSequence
- Erforderliche
CharSequence
-Zusammenfassung - Liste der
Action
-Elemente, die der Nutzer für diese Benachrichtigung verwenden kann
- Erforderlicher Titel für
- Invarianten:
<ph type="x-smartling-placeholder">
- </ph>
- Die Liste der
Action
-Instanzen muss aus Aktionen mit eindeutigen Kennungen - Die Liste der
Action
-Instanzen muss entweder eine oder zweiAction
enthalten Elemente. Wenn die Umsetzbarkeit nichtISSUE_ACTIONABILITY_MANUAL
ist,Action
darf keinen Wert enthalten. - Der OnDismiss-
PendingIntent
darf keineActivity
-Instanz öffnen - Zusätzliche Anforderungen, die durch die API-Konfiguration auferlegt werden
- Die Liste der
Daten zu bestimmten Ereignissen werden dem Sicherheitscenter bereitgestellt. Daher ist es notwendig,
Angeben, warum die Quelle SafetySourceData
mit einem
SafetyEvent
-Instanz.
SafetyEvent
- Erforderlicher Typ, der einer der folgenden sein muss:
<ph type="x-smartling-placeholder">
- </ph>
SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
: Der Status der Quelle wurde geändert.SAFETY_EVENT_TYPE_REFRESH_REQUESTED
: auf eine Aktualisierung/erneuten Scan reagieren vom Sicherheitscenter erhalten, verwenden Sie dieses stattSAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
, damit das Sicherheitscenter die Anforderung zum Aktualisieren/Erneuten Scannen nachverfolgt.SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED
: Wir haben das Problem behobenSafetySourceIssue.Action
direkt über das Sicherheitscenter. nutzen stattSAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
aus Sicherheitsgründen um die gelöstenSafetySourceIssue.Action
nachzuverfolgen.SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED
: Wir haben versucht,SafetySourceIssue.Action
direkt vom Bildschirm des Sicherheitscenters aus, hat dies nicht getan. verwenden Sie dieses stattSAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
, damit das Sicherheitscenter TitelSafetySourceIssue.Action
fehlgeschlagen ist.SAFETY_EVENT_TYPE_DEVICE_LOCALE_CHANGED
: die Sprache des Geräts hat sich geändert. Wir aktualisieren daher den Text der bereitgestellten Daten. es ist darfSAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
hierfür verwenden.SAFETY_EVENT_TYPE_DEVICE_REBOOTED
: Wir stellen diese Daten im Rahmen beim ersten Startvorgang, da die Daten des Sicherheitscenters nicht Neustarts; dürfenSAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED
verwendet werden dafür.
- Optionale
String
-Kennung für die Übertragungs-ID der Aktualisierung. - Optionale
String
-Kennung für dieSafetySourceIssue
-Instanz, die abgerufen wird behoben. - Optionale
String
-Kennung für dieSafetySourceIssue.Action
-Instanz gelöst werden kann. - Invarianten:
<ph type="x-smartling-placeholder">
- </ph>
- Die Übertragungs-ID zur Aktualisierung muss angegeben werden, wenn der Typ
SAFETY_EVENT_TYPE_REFRESH_REQUESTED
- Die Problem- und Aktions-IDs müssen angegeben werden, wenn der Typ
SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED
oderSAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED
- Die Übertragungs-ID zur Aktualisierung muss angegeben werden, wenn der Typ
Unten sehen Sie ein Beispiel dafür, wie eine Quelle Daten an das Sicherheitscenter weitergeben könnte (in dieser wenn ein Eintrag mit einer einzelnen Warnung angezeigt wird):
PendingIntent redirectToMyScreen =
PendingIntent.getActivity(
context, requestCode, redirectToMyScreenIntent, PendingIntent.FLAG_IMMUTABLE);
SafetySourceData safetySourceData =
new SafetySourceData.Builder()
.setStatus(
new SafetySourceStatus.Builder(
"title", "summary", SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION)
.setPendingIntent(redirectToMyScreen)
.build())
.addIssue(
new SafetySourceIssue.Builder(
"MyIssueId",
"title",
"summary",
SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION,
"MyIssueTypeId")
.setSubtitle("subtitle")
.setIssueCategory(SafetySourceIssue.ISSUE_CATEGORY_DEVICE)
.addAction(
new SafetySourceIssue.Action.Builder(
"MyIssueActionId", "label", redirectToMyScreen)
.build())
.build())
.build();
SafetyEvent safetyEvent = new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
safetyCenterManager.setSafetySourceData("MySourceId", safetySourceData, safetyEvent);
Letzte bereitgestellte Daten abrufen
Sie können die letzten im Sicherheitscenter bereitgestellten Daten zu einer Quelle abrufen, die Ihrem
Damit können Sie etwas in Ihrer
eigenen Benutzeroberfläche anzeigen, um zu prüfen,
aktualisiert werden muss, bevor ein teurer Vorgang durchgeführt wird, oder um
dieselbe SafetySourceData
-Instanz im Sicherheitscenter mit einigen Änderungen oder mit einem
neue SafetyEvent
-Instanz. Sie ist auch zum Testen nützlich.
Verwende diesen Code, um die letzten Daten abzurufen, die dem Sicherheitscenter gesendet wurden:
SafetySourceData lastDataProvided =
safetyCenterManager.getSafetySourceData("MySourceId");
Fehler melden
Wenn Sie keine Daten zu „SafetySourceData
“ erfassen können, können Sie den Fehler an die Sicherheit „Sicherheit“ melden
, wodurch der Eintrag grau wird, die im Cache gespeicherten Daten gelöscht und eine
erhalten Sie eine Meldung wie Einstellung konnte nicht geprüft werden. Sie können auch einen Fehler melden, wenn
eine Instanz von SafetySourceIssue.Action
nicht aufgelöst wird.
werden die im Cache gespeicherten Daten nicht gelöscht und der UI-Eintrag bleibt unverändert. aber eine Nachricht ist
angezeigt, um sie über den Fehler zu informieren.
Sie können den Fehler mit SafetySourceErrorDetails
angeben, das sich aus
von:
SafetySourceErrorDetails
: ErforderlicheSafetyEvent
-Instanz:
// An error has occurred in the background, need to clear the Safety Center data to avoid showing data that may not be valid anymore
SafetyEvent safetyEvent = new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
SafetySourceErrorDetails safetySourceErrorDetails = new SafetySourceErrorDetails(safetyEvent);
safetyCenterManager.reportSafetySourceError("MySourceId", safetySourceErrorDetails);
Auf eine Anfrage zur Aktualisierung oder erneuten Überprüfung antworten
Sie können sich vom Sicherheitscenter anweisen, neue Daten bereitzustellen. Wenn Sie auf eine eine Aktualisierungs- oder Prüfungsanfrage stellt sicher, dass der Nutzer den aktuellen Status Sicherheitscenter öffnen und auf die Schaltfläche „Scannen“ tippen.
Dies erfolgt durch den Empfang einer Übertragung mit der folgenden Aktion:
ACTION_REFRESH_SAFETY_SOURCES
- Stringwert:
android.safetycenter.action.REFRESH_SAFETY_SOURCES
- Wird ausgelöst, wenn das Sicherheitscenter eine Anfrage zum Aktualisieren der Daten von Die Sicherheitsquelle einer bestimmten App
- Geschützter Intent, der nur vom System gesendet werden kann
- Wird als explizite Nachricht an alle Sicherheitsquellen in der Konfigurationsdatei gesendet
Intent und erfordert die Berechtigung
SEND_SAFETY_CENTER_UPDATE
- Stringwert:
Die folgenden Extras werden im Rahmen dieser Übertragung zur Verfügung gestellt:
EXTRA_REFRESH_SAFETY_SOURCE_IDS
- Stringwert:
android.safetycenter.extra.REFRESH_SAFETY_SOURCE_IDS
- String-Arraytyp (
String[]
) stellt die Quell-IDs dar, für die aktualisiert werden soll die angegebene App
- Stringwert:
EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE
- Stringwert:
android.safetycenter.extra.REFRESH_SAFETY_SOURCES_REQUEST_TYPE
- Ganzzahltyp, stellt einen Anfragetyp dar
@IntDef
- Folgende Werte sind möglich:
<ph type="x-smartling-placeholder">
- </ph>
EXTRA_REFRESH_REQUEST_TYPE_GET_DATA
: Fordert die Quelle an, relativ schnell Daten bereitstellen, in der Regel, wenn der Nutzer die Seite öffnet.EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA
: Fordert die Quelle an die Daten so aktuell wie möglich bereitzustellen. Dies geschieht normalerweise, drückt die Schaltfläche „Erneuter Scan“.
- Stringwert:
EXTRA_REFRESH_SAFETY_SOURCES_BROADCAST_ID
- Stringwert:
android.safetycenter.extra.REFRESH_SAFETY_SOURCES_BROADCAST_ID
- Stringtyp, stellt eine eindeutige Kennung für die angeforderte Aktualisierung dar
- Stringwert:
Um ein Signal vom Sicherheitscenter zu erhalten, musst du eine
BroadcastReceiver
Instanz. Die Nachricht wird mit einer speziellen BroadcastOptions
gesendet, die das
Empfänger, um einen Dienst im Vordergrund zu starten.
BroadcastReceiver
antwortet auf eine Aktualisierungsanfrage:
public final class SafetySourceReceiver extends BroadcastReceiver {
// All the safety sources owned by this application.
private static final String[] ALL_SAFETY_SOURCES = new String[] {"MySourceId1", "…"};
@Override
public void onReceive(Context context, Intent intent) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
// Must be on T or above to interact with Safety Center.
return;
}
String action = intent.getAction();
if (!SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES.equals(action)) {
return;
}
String refreshBroadcastId =
intent.getStringExtra(SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCES_BROADCAST_ID);
if (refreshBroadcastId == null) {
// Should always be provided.
return;
}
String[] sourceIds =
intent.getStringArrayExtra(SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS);
if (sourceIds == null) {
sourceIds = ALL_SAFETY_SOURCES;
}
int requestType =
intent.getIntExtra(
SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE,
SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_GET_DATA);
SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class);
if (safetyCenterManager == null) {
// Should not be null on T.
return;
}
if (!safetyCenterManager.isSafetyCenterEnabled()) {
// Preferably, no Safety Source code should be run if Safety Center is disabled.
return;
}
SafetyEvent refreshSafetyEvent =
new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_REFRESH_REQUESTED)
.setRefreshBroadcastId(refreshBroadcastId)
.build();
for (String sourceId : sourceIds) {
SafetySourceData safetySourceData = getSafetySourceDataFor(sourceId, requestType);
// Set the data (or report an error with reportSafetySourceError, if something went wrong).
safetyCenterManager.setSafetySourceData(sourceId, safetySourceData, refreshSafetyEvent);
}
}
private SafetySourceData getSafetySourceDataFor(String sourceId, int requestType) {
switch (requestType) {
case SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_GET_DATA:
return getRefreshSafetySourceDataFor(sourceId);
case SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA:
return getRescanSafetySourceDataFor(sourceId);
default:
}
return getRefreshSafetySourceDataFor(sourceId);
}
// Data to provide when the user opens the page or on specific events.
private SafetySourceData getRefreshSafetySourceDataFor(String sourceId) {
// Get data for the source, if it's a fast operation it could potentially be executed in the
// receiver directly.
// Otherwise, it must start some kind of foreground service or expedited job.
return null;
}
// Data to provide when the user pressed the rescan button.
private SafetySourceData getRescanSafetySourceDataFor(String sourceId) {
// Could be implemented the same way as getRefreshSafetySourceDataFor, depending on the source's
// need.
// Otherwise, could potentially perform a longer task.
// In which case, it must start some kind of foreground service or expedited job.
return null;
}
}
Dieselbe Instanz von BroadcastReceiver
im obigen Beispiel wird in deklariert.
AndroidManifest.xml
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="…">
<application>
<!-- … -->
<receiver android:name=".SafetySourceReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.safetycenter.action.REFRESH_SAFETY_SOURCES"/>
</intent-filter>
</receiver>
<!-- … -->
</application>
</manifest>
Idealerweise ist eine Sicherheitscenter-Quelle so implementiert, dass
SafetyCenterManager
, wenn sich die Daten ändern. Aus Gründen des Systemzustands
empfehlen, nur auf das Signal „Erneuter Scan“ zu reagieren (wenn der Nutzer auf den Scan tippt)
Schaltfläche) und nicht, wenn der Nutzer das Sicherheitscenter öffnet. Wenn diese Funktion
erforderlich, das Feld refreshOnPageOpenAllowed="true"
in der Konfigurationsdatei
muss festgelegt sein, damit die Quelle in diesen Fällen die gesendete Übertragung empfangen kann.
Auf das Sicherheitscenter reagieren, wenn es aktiviert oder deaktiviert ist
Wenn das Sicherheitscenter aktiviert oder deaktiviert ist, können Sie mit Intent-Aktion:
ACTION_SAFETY_CENTER_ENABLED_CHANGED
- Stringwert:
android.safetycenter.action.SAFETY_CENTER_ENABLED_CHANGED
- Wird ausgelöst, wenn das Sicherheitscenter während der Gerät wird ausgeführt
- Wird beim Booten nicht aufgerufen (verwenden
ACTION_BOOT_COMPLETED
dafür) - Geschützter Intent, der nur vom System gesendet werden kann
- Wird als explizite Nachricht an alle Sicherheitsquellen in der Konfigurationsdatei gesendet
Intent, erfordert die Berechtigung
SEND_SAFETY_CENTER_UPDATE
- Wird als impliziter Intent gesendet, für den
READ_SAFETY_CENTER_STATUS
erforderlich ist Berechtigung
- Stringwert:
Diese Intent-Aktion ist nützlich, um Funktionen zu aktivieren oder zu deaktivieren, die mit Sicherheitscenter auf dem Gerät.
Lösungsmaßnahmen implementieren
Eine Auflösungsaktion ist eine SafetySourceIssue.Action
-Instanz, die ein Nutzer
können Sie das Problem direkt über das Sicherheitscenter lösen. Die nutzende Person tippt auf eine Aktionsschaltfläche.
und die PendingIntent
-Instanz in SafetySourceIssue.Action
, die vom
Sicherheitsquelle ausgelöst, wodurch das Problem im Hintergrund behoben und
benachrichtigt das Sicherheitscenter, sobald der Vorgang abgeschlossen ist.
Zum Implementieren von Auflösungsaktionen kann die Sicherheitscenter-Quelle einen Dienst verwenden, wenn
Der Vorgang dauert voraussichtlich einige Zeit (PendingIntent.getService
) oder
Übertragungsempfänger (PendingIntent.getBroadcast
).
Verwende diesen Code, um ein Problem an das Sicherheitscenter zu senden:
Intent resolveIssueBroadcastIntent =
new Intent("my.package.name.MY_RESOLVING_ACTION").setClass(ResolveActionReceiver.class);
PendingIntent resolveIssue =
PendingIntent.getBroadcast(
context, requestCode, resolveIssueBroadcastIntent, PendingIntent.FLAG_IMMUTABLE);
SafetySourceData safetySourceData =
new SafetySourceData.Builder()
.setStatus(
new SafetySourceStatus.Builder(
"title", "summary", SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION)
.setPendingIntent(redirectToMyScreen)
.build())
.addIssue(
new SafetySourceIssue.Builder(
"MyIssueId",
"title",
"summary",
SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION,
"MyIssueTypeId")
.setIssueCategory(SafetySourceIssue.ISSUE_CATEGORY_DEVICE)
.addAction(
new SafetySourceIssue.Action.Builder(
"MyIssueActionId", "label", resolveIssue)
.setWillResolve(true)
.build())
.build())
.build();
SafetyEvent safetyEvent = new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
safetyCenterManager.setSafetySourceData("MySourceId", safetySourceData, safetyEvent);
BroadcastReceiver
löst die Aktion aus:
public final class ResolveActionReceiver extends BroadcastReceiver {
private static final String MY_RESOLVING_ACTION = "my.package.name.MY_RESOLVING_ACTION";
@Override
public void onReceive(Context context, Intent intent) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
// Must be on T or above to interact with Safety Center.
return;
}
String action = intent.getAction();
if (!MY_RESOLVING_ACTION.equals(action)) {
return;
}
SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class);
if (safetyCenterManager == null) {
// Should not be null on T.
return;
}
if (!safetyCenterManager.isSafetyCenterEnabled()) {
// Preferably, no Safety Source code should be run if Safety Center is disabled.
return;
}
resolveTheIssue();
SafetyEvent resolveActionSafetyEvent =
new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED)
.setSafetySourceIssueId("MyIssueId")
.setSafetySourceIssueActionId("MyIssueActionId")
.build();
SafetySourceData dataWithoutTheIssue = …;
// Set the data (or report an error with reportSafetySourceError and
// SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED, if something went wrong).
safetyCenterManager.setSafetySourceData("MySourceId", dataWithoutTheIssue, resolveActionSafetyEvent);
}
private void resolveTheIssue() {
// Resolves the issue for the user. Given this a BroadcastReceiver, this should be a fast action.
// Otherwise, a foreground service and PendingIntent.getService should be used instead (or a job
// could be scheduled here, too).
}
}
Dieselbe Instanz von BroadcastReceiver
im obigen Beispiel wird in deklariert.
AndroidManifest.xml
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="…">
<application>
<!-- … -->
<receiver android:name=".ResolveActionReceiver"
android:exported="false">
<intent-filter>
<action android:name="my.package.name.MY_RESOLVING_ACTION"/>
</intent-filter>
</receiver>
<!-- … -->
</application>
</manifest>
Auf Ablehnungen von Problemen reagieren
Sie können eine PendingIntent
-Instanz angeben, die ausgelöst werden kann, wenn ein
SafetySourceIssue
Instanz wurde geschlossen. Das Sicherheitscenter kümmert sich um diese Probleme
Ablehnungen:
- Wenn von einer Quelle ein Problem gemeldet wird, kann der Nutzer es im Sicherheitscenter schließen. Bildschirm, indem Sie auf die Schaltfläche zum Schließen tippen (eine X-Schaltfläche auf der Karte mit Warnungen).
- Wenn ein Nutzer ein Problem ablehnt und das Problem weiterhin besteht, wird es nicht angezeigt auf der Benutzeroberfläche.
- Ein Laufwerk bleibt auch bei Geräteneustarts dauerhaft geschlossen.
- Wenn die Quelle des Sicherheitscenters kein Problem mehr anzeigt und dann zu einem späteren Zeitpunkt erneut auftreten, tritt es wieder auf. Dadurch soll die wenn ein Nutzer eine Warnung sieht, sie schließt und dann Maßnahmen ergreift, sollte das Problem behoben werden, aber die Nutzenden tun wieder etwas, verursacht ein ähnliches Problem. An dieser Stelle sollte die Warnungskarte wieder angezeigt werden.
- Gelbe und rote Warnkarten werden alle 180 Tage wieder angezeigt, es sei denn, der Nutzer hat mehrere Male geschlossen.
Zusätzliche Verhaltensweisen sollten von der Quelle nicht erforderlich sein, es sei denn:
- Die Quelle versucht, dieses Verhalten auf unterschiedliche Weise zu implementieren, zum Beispiel das Problem noch einmal ansprechen.
- Die Quelle versucht, dies als Callback zu verwenden, um beispielsweise das Ereignis Informationen.
Daten für mehrere Nutzer/Profile bereitstellen
Die SafetyCenterManager
API kann nutzer- und profilübergreifend verwendet werden. Weitere Informationen
erhalten Sie unter Building Multiuser-Aware
Apps: Das Context
Objekt, das SafetyCenterManager
bereitstellt, ist mit einem UserHandle
verknüpft.
, sodass die zurückgegebene SafetyCenterManager
-Instanz mit dem
Sicherheitscenter für diese UserHandle
Instanz. Standardmäßig ist Context
die mit dem aktiven Nutzer verknüpft sind.
Sie können aber auch eine Instanz für
einen anderen Nutzer, wenn die App die INTERACT_ACROSS_USERS
- und
INTERACT_ACROSS_USERS_FULL
-Berechtigungen. In diesem Beispiel sehen Sie,
für alle Nutzer/Profile:
Context userContext = context.createContextAsUser(userHandle, 0);
SafetyCenterManager userSafetyCenterManager = userContext.getSystemService(SafetyCenterManager.class);
if (userSafetyCenterManager == null) {
// Should not be null on T.
return;
}
// Calls to userSafetyCenterManager will provide data for the given userHandle
Jeder Nutzer auf dem Gerät kann mehrere verwaltete Profile haben. Das Sicherheitscenter stellt für jeden Nutzer unterschiedliche Daten bereit, führt jedoch die Daten aller verwalteten Profilen, die mit einem bestimmten Nutzer verknüpft sind.
Wenn profile="all_profiles"
für die Quelle in der Konfigurationsdatei festgelegt ist,
Folgendes geschieht:
- Es gibt einen UI-Eintrag für den Nutzer (das übergeordnete Profil) und alle zugehörigen
Verwaltete Profile, die
titleForWork
Instanzen verwenden Das Signal zur Aktualisierung oder erneuten Prüfung wird für das übergeordnete Profil und alle verknüpfte verwaltete Profile. Der zugeordnete Empfänger wird jeweils Profil und kann die zugehörigen Daten direkt an
SafetyCenterManager
ohne einen profilübergreifenden Anruf tätigen zu müssen, es sei denn, das oder die App istsingleUser
Von der Quelle wird erwartet, dass sie Daten für den Nutzer und alle verwalteten Konten bereitstellt. Profilen. Die Daten für die einzelnen Einträge in der Benutzeroberfläche können je nach zu erstellen.
Testen
können Sie auf ShadowSafetyCenterManager
zugreifen und es in einem Robolectric-Test verwenden.
private static final String MY_SOURCE_ID = "MySourceId";
private final MyClass myClass = …;
private final SafetyCenterManager safetyCenterManager = getApplicationContext().getSystemService(SafetyCenterManager.class);
@Test
public void whenRefreshingData_providesDataToSafetyCenterForMySourceId() {
shadowOf(safetyCenterManager).setSafetyCenterEnabled(true);
setupDataForMyClass(…);
myClass.refreshData();
SafetySourceData expectedSafetySourceData = …;
assertThat(safetyCenterManager.getSafetySourceData(MY_SOURCE_ID)).isEqualTo(expectedSafetySourceData);
SafetyEvent expectedSafetyEvent = …;
assertThat(shadowOf(safetyCenterManager).getLastSafetyEvent(MY_SOURCE_ID)).isEqualTo(expectedSafetyEvent);
}
Sie können weitere End-to-End-Tests (E2E) schreiben, aber das wäre in diesem Fall nicht möglich. . Weitere Informationen zum Schreiben dieser E2E-Tests finden Sie unter CTS-Tests (CtsSafetyCenterTestCases)
Test und interne APIs
Die internen APIs und Test-APIs sind für den internen Gebrauch vorgesehen und werden daher nicht beschrieben in in diesem Leitfaden. Wir werden jedoch möglicherweise einige interne APIs in Zukunft erweitern. damit OEMs ihre eigene Benutzeroberfläche erstellen können. Wir aktualisieren diesen Leitfaden, zu ihrer Verwendung.
Berechtigungen
MANAGE_SAFETY_CENTER
internal|installer|role
- Wird für die internen Sicherheitscenter-APIs verwendet
- Nur PermissionController und Shell gewährt
App "Einstellungen"
Weiterleitung zum Sicherheitscenter
Standardmäßig wird das Sicherheitscenter über die App „Einstellungen“ mit einem neuen Sicherheit und Datenschutzeintrag. Wenn Sie eine andere App für Einstellungen verwenden oder Sie die Einstellungen geändert haben, müssen Sie möglicherweise anpassen, wie das Sicherheitscenter auf die zugegriffen wird.
Wenn das Sicherheitscenter aktiviert ist, gilt Folgendes:
- Der alte Datenschutzeintrag ist versteckter Code
- Der alte Eintrag Security (Sicherheit) ist versteckter Code.
- Neu: Sicherheit und Datenschutzeintrag wurde hinzugefügt. Code
- Neu: Sicherheit und Der Datenschutz-Eintrag wird zum Sicherheitscentercode weitergeleitet.
android.settings.PRIVACY_SETTINGS
undandroid.settings.SECURITY_SETTINGS
Intent-Aktionen werden zum Öffnen des Sicherheitscenters weitergeleitet (Code: Sicherheit, Datenschutz)
Erweiterte Seiten zu Sicherheit und Datenschutz
Die App „Einstellungen“ enthält unter Weitere Sicherheitseinstellungen zusätzliche Einstellungen. und Weitere Datenschutzeinstellungen finden Sie im Sicherheitscenter:
Erweiterter Sicherheitscode
Erweiterter Datenschutzcode
Ab Android 14 werden die erweiterten Sicherheits- und Seite „Erweiterte Datenschutzeinstellungen“ in der Seite „Mehr Sicherheit Datenschutz“ Seite mit Intent-Aktion
"com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS"
Sicherheitsquellen
Das Sicherheitscenter ist in bestimmte Sicherheitsquellen integriert, die vom App „Einstellungen“:
- Eine Sicherheitsquelle für den Sperrbildschirm bestätigt, dass ein Sperrbildschirm mit einem Sicherheitscodes oder andere Sicherheitsmechanismen ein, um die privaten Informationen des Nutzers zu schützen. geschützt sind.
- Eine biometrische Sicherheitsquelle (standardmäßig ausgeblendet) für die Integration in eine Fingerabdruck- oder Gesichtserkennung.
Der Quellcode für diese Sicherheitscenter-Quellen ist über Android Code Suche. Wenn die App „Einstellungen“ nicht geändert wird (d. h., es werden keine Änderungen am Paketnamen vorgenommen, Quellcode oder Quellcode, der einen Sperrbildschirm und biometrische Daten enthält, sollte diese Integration sofort funktionieren. Andernfalls werden einige Änderungen z. B. die Konfigurationsdatei ändern, um das Paket Namen der Einstellungen und der Quellen, die mit dem Sicherheitscenter verknüpft sind, wie und die Integration. Weitere Informationen finden Sie unter Konfiguration aktualisieren Datei und die Integration Einstellungen.
Informationen zu PendingIntent
Wenn Sie die bestehende Integration des Sicherheitscenters in der App „Einstellungen“ in Android nutzen 14 oder höher haben, wurde der unten beschriebene Fehler behoben. In diesem Fall ist es nicht erforderlich, diesen Abschnitt zu lesen.
Wenn du sicher bist, dass der Fehler nicht existiert, lege eine boolesche XML-Ressource fest
Konfigurationswert in der App „Einstellungen“
config_isSafetyCenterLockScreenPendingIntentFixed
bis true
, um Folgendes zu deaktivieren:
Behelfslösung im Sicherheitscenter.
PendingIntent-Problemumgehung
Dieser Fehler wird dadurch verursacht, dass in den Einstellungen mit Intent
-Instanzextras ermittelt wird, welche
das zu öffnende Fragment. Weil Intent#equals
die Instanz Intent
nicht übernimmt
die PendingIntent
-Instanz für das Zahnradsymbol und den
als gleichwertig betrachtet werden und
zu derselben UI navigieren, obwohl diese
die zu einer anderen Benutzeroberfläche navigiert ist). Dieses Problem wurde in einer QPR-Version behoben,
PendingIntent
-Instanzen nach Anfragecode unterscheiden. Alternativ können Sie
könnte diese mithilfe von Intent#setId
unterschieden werden.
Interne Sicherheitsquellen
Einige Quellen des Sicherheitscenters sind intern und werden in der PermissionController-System-App innerhalb des PermissionController-Moduls. Diese verhalten sich wie normale Quellen im Sicherheitscenter und erhalten keine besonderen Behandlung. Code für diese Quellen ist über Android-Code verfügbar. Suche.
Dies sind hauptsächlich Datenschutzsignale, zum Beispiel:
- Bedienungshilfen
- Nicht verwendete Apps automatisch widerrufen
- Standortzugriff
- Benachrichtigungs-Listener
- Informationen zu den Arbeitsrichtlinien