AutofillService Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ein AutofillService
ist ein Dienst, der verwendet wird, um den Inhalt des Bildschirms im Namen eines bestimmten Benutzers automatisch auszufüllen. Weitere Informationen zum automatischen Ausfüllen finden Sie unter AutoAusfüllframework.
[Android.Runtime.Register("android/service/autofill/AutofillService", ApiSince=26, DoNotGenerateAcw=true)]
public abstract class AutofillService : Android.App.Service
[<Android.Runtime.Register("android/service/autofill/AutofillService", ApiSince=26, DoNotGenerateAcw=true)>]
type AutofillService = class
inherit Service
- Vererbung
- Attribute
Hinweise
Ein AutofillService
ist ein Dienst, der verwendet wird, um den Inhalt des Bildschirms im Namen eines bestimmten Benutzers automatisch auszufüllen. Weitere Informationen zum automatischen Ausfüllen finden Sie unter AutoAusfüllframework.
Ein AutofillService
ist nur zu Zwecken des automatischen Ausfüllens an das Android-System gebunden, wenn: <ol><li>Es die Berechtigung in seinem Manifest erfordert android.permission.BIND_AUTOFILL_SERVICE
. <li>Der Benutzer aktiviert es explizit mithilfe der Android-Einstellungen (die Settings#ACTION_REQUEST_SET_AUTOFILL_SERVICE
Absicht kann verwendet werden, um einen solchen Einstellungsbildschirm zu starten). </Ol>
"BasicUsage"><h3>Basic usage</h3>
Der grundlegende Automatische Ausfüllprozess wird durch den folgenden Workflow definiert: <ol><li>Benutzerfokus und bearbeitbare View
. <li>View ruft auf AutofillManager#notifyViewEntered(android.view.View)
. <li>Eine ViewStructure
, die alle Ansichten auf dem Bildschirm darstellt, wird erstellt. <li>Das Android-System bindet an den Dienst und ruft auf #onConnected()
. <li>Der Dienst empfängt die Ansichtsstruktur über .#onFillRequest(FillRequest, CancellationSignal, FillCallback)
<li>Der Dienst antwortet über FillCallback#onSuccess(FillResponse)
. <li>Das Android-System ruft auf #onDisconnected()
und hebt die Bindung von auf AutofillService
. <li>Das Android-System zeigt eine Benutzeroberfläche für das automatische Ausfüllen mit den vom Dienst gesendeten Optionen an. <li>Der Benutzer wählt eine Option aus. <li>Die richtigen Ansichten werden automatisch ausgefüllt. </Ol>
Dieser Workflow wurde entwickelt, um die Zeit zu minimieren, die das Android-System an den Dienst gebunden ist. Für jeden Aufruf wird eine Bindung an den Dienst hergestellt, auf die Antwort gewartet und die Bindung sofort entfernt. Darüber hinaus werden diese Aufrufe als zustandslos betrachtet: Wenn der Dienst den Zustand zwischen Aufrufen beibehalten muss, muss er seine eigene Zustandsverwaltung durchführen (beachten Sie, dass der Prozess des Diensts möglicherweise vom Android-System beendet wird, wenn er nicht gebunden ist, z. B. wenn das Gerät nicht genügend Arbeitsspeicher hat).
In der Regel wird: #onFillRequest(FillRequest, CancellationSignal, FillCallback)
<ol><li>Analysieren der Ansichtsstruktur auf der Suche nach automatisch ausfüllbaren Ansichten (z. B. mit android.app.assist.AssistStructure.ViewNode#getAutofillHints()
. <li>Zuordnen der automatisch ausfüllbaren Ansichten mit den Daten des Benutzers. <li>Erstellen Sie eine Dataset
für jeden Satz von Benutzerdaten, die diesen Feldern entsprechen. <li>Füllen Sie die Datasets mit den richtigen AutofillId
s und AutofillValue
s. <li>Fügen Sie die Datasets der an FillResponse
übergebenen hinzu FillCallback#onSuccess(FillResponse)
. </Ol>
Für einen Anmeldebildschirm mit Benutzernamen- und Kennwortansichten, bei dem der Benutzer nur über ein Konto im Dienst verfügt, kann die Antwort beispielsweise wie folgt aussehen:
new FillResponse.Builder()
.addDataset(new Dataset.Builder()
.setValue(id1, AutofillValue.forText("homer"), createPresentation("homer"))
.setValue(id2, AutofillValue.forText("D'OH!"), createPresentation("password for homer"))
.build())
.build();
Wenn der Benutzer jedoch über 2 Konten verfügt, könnte die Antwort wie folgt sein:
new FillResponse.Builder()
.addDataset(new Dataset.Builder()
.setValue(id1, AutofillValue.forText("homer"), createPresentation("homer"))
.setValue(id2, AutofillValue.forText("D'OH!"), createPresentation("password for homer"))
.build())
.addDataset(new Dataset.Builder()
.setValue(id1, AutofillValue.forText("flanders"), createPresentation("flanders"))
.setValue(id2, AutofillValue.forText("OkelyDokelyDo"), createPresentation("password for flanders"))
.build())
.build();
Wenn der Dienst keine automatisch ausfüllbare Sicht in der Ansichtsstruktur findet, sollte er an FillCallback#onSuccess(FillResponse)
übergebennull
. Wenn beim Verarbeiten der Anforderung ein Fehler aufgetreten ist, sollte er aufrufenFillCallback#onFailure(CharSequence)
. Aus Leistungsgründen ist es von entscheidender Bedeutung, dass der Dienst entweder FillCallback#onSuccess(FillResponse)
oder FillCallback#onFailure(CharSequence)
für jeden #onFillRequest(FillRequest, CancellationSignal, FillCallback)
empfangenen Aufruf aufruft. Wenn dies nicht der Fall ist, wird die Anforderung schließlich timeout und vom Android-System verworfen.
"SavingUserData"><h3>Speichern von Benutzerdaten</h3>
Wenn der Dienst auch am Speichern der vom Benutzer ausgefüllten Daten interessiert ist, muss er ein SaveInfo
-Objekt in festlegen FillResponse
. Weitere Details und Beispiele finden Sie unter SaveInfo
.
"UserAuthentication"><h3>Benutzerauthentifizierung</h3>
Der Dienst kann ein zusätzliches Maß an Sicherheit bieten, da der Benutzer sich authentifizieren muss, bevor eine App automatisch ausgefüllt werden kann. Die Authentifizierung ist in der Regel in 2 Szenarien erforderlich: <ul<>li>Zum Entsperren der Benutzerdaten (z. B. mithilfe eines Standard Kennworts oder fingerabdruckauthentifizierung) – siehe FillResponse.Builder#setAuthentication(AutofillId[], android.content.IntentSender, android.widget.RemoteViews)
. <li>So entsperren Sie ein bestimmtes Dataset (z. B. durch Bereitstellen eines CVC für ein Guthaben Karte) - siehe Dataset.Builder#setAuthentication(android.content.IntentSender)
. </ul>
Bei verwendung der Authentifizierung wird empfohlen, nur die vertraulichen Daten zu verschlüsseln und Bezeichnungen unverschlüsselt zu lassen, damit sie in Präsentationsansichten verwendet werden können. Wenn der Benutzer beispielsweise über eine Privat- und eine Geschäftsadresse verfügt, sollten die Home
Bezeichnungen und Work
unverschlüsselt gespeichert werden (da sie keine vertraulichen Daten enthalten), während die Adressdaten an sich in einem verschlüsselten Speicher gespeichert werden können. Wenn der Benutzer dann das Home
Dataset auswählt, startet die Plattform den Authentifizierungsfluss, und der Dienst kann die vertraulichen Daten entschlüsseln.
Der Authentifizierungsmechanismus kann auch in Szenarien verwendet werden, in denen der Dienst mehrere Schritte benötigt, um die Datasets zu bestimmen, die einen Bildschirm ausfüllen können. Beim automatischen Ausfüllen einer Finanz-App, bei der der Benutzer Über Konten für mehrere Banken verfügt, kann der Workflow beispielsweise wie folgt aussehen:
<ol><li>Das erste FillResponse
enthält Datasets mit den Anmeldeinformationen für die Finanz-App sowie ein "gefälschtes" Dataset, dessen Präsentation "Tippen Sie hier für Anmeldeinformationen für Banking-Apps" lautet. <li>Wenn der Benutzer das gefälschte Dataset auswählt, zeigt der Dienst ein Dialogfeld mit verfügbaren Banking-Apps an. <li>Wenn der Benutzer eine Banking-App auswählt, antwortet der Dienst mit einer neuen FillResponse
, die die Datasets für diese Bank enthält. </Ol>
Ein weiteres Beispiel für die Auswahl von Datasets in mehreren Schritten ist, wenn der Dienst die Benutzeranmeldeinformationen in "Tresoren" speichert: Die erste Antwort enthält gefälschte Datasets mit den Tresornamen, und die nachfolgende Antwort würde die app-Anmeldeinformationen enthalten, die in diesem Tresor gespeichert sind.
"DataPartioning"><h3>Datenpartitionierung</h3>
Die automatisch ausfüllbaren Ansichten in einem Bildschirm sollten in logischen Gruppen gruppiert werden, die als "Partitionen" bezeichnet werden. Typische Partitionen sind: <ul><li>Credentials (Benutzername/E-Mail-Adresse, Kennwort). <li>Adresse (Straße, Stadt, Bundesland, Postleitzahl usw.). <li>Zahlungsinformationen (Guthaben Karte Nummer, Ablaufdatum und Überprüfungscode). </ul>
Wenn ein Bildschirm mehr als eine Partition aufweist, ist es aus Sicherheitsgründen von größter Bedeutung, dass der Inhalt eines Datasets nicht mehrere Partitionen erzeugt, insbesondere dann, wenn eine der Partitionen Daten enthält, die nicht spezifisch für die anwendung sind, die automatisch ausgefüllt wird. Beispielsweise sollte ein Dataset keine Felder für Benutzernamen, Kennwort und Guthaben Karte Informationen enthalten. Der Grund für diese Regel besteht darin, dass eine böswillige App eine Ansichtsstruktur entwerfen könnte, in der das Guthaben Karte Felder nicht sichtbar ist. Wenn der Benutzer also ein Dataset auf der Benutzeroberfläche des Benutzernamens auswählt, wird das Guthaben Karte Informationen ohne Das Wissen des Benutzers für die Anwendung freigegeben. Ebenso wird empfohlen, immer ein Dataset zu schützen, das vertrauliche Informationen enthält, indem Die Datasetauthentifizierung erforderlich ist (siehe Dataset.Builder#setAuthentication(android.content.IntentSender)
), und Informationen zum "primären" Feld der Partition in die benutzerdefinierte Präsentation für "sekundäre" Felder— , die verhindern würde, dass eine schädliche App die "primären" Felder erhält, ohne dass der Benutzer feststellen würde, dass sie freigegeben werden (z. B. könnte eine böswillige App Felder für eine Gutschrift Karte Nummer, Überprüfungscode und Ablaufdatum so gestaltet haben, dass nur letzteres sichtbar ist; indem explizit angegeben wird, dass sich das Ablaufdatum auf eine bestimmte Gutschrift Karte zahl, der Dienst würde einen visuellen Hinweis für die Benutzer bereitstellen, um zu überprüfen, was beim Auswählen dieses Felds freigegeben würde).
Wenn der Dienst erkennt, dass ein Bildschirm über mehrere Partitionen verfügt, sollte er einen FillResponse
mit nur den Datasets für die Partition zurückgeben, die die Anforderung ausgelöst hat (d. h. die Partition, die android.app.assist.AssistStructure.ViewNode
deren android.app.assist.AssistStructure.ViewNode#isFocused()
Rückgaben aufweist true
). Wenn der Benutzer dann ein Feld aus einer anderen Partition auswählt, ruft das Android-System diese Partition erneut #onFillRequest(FillRequest, CancellationSignal, FillCallback)
auf, usw.
Beachten Sie, dass beim automatischen Ausfüllen einer Partition mit den vom Dienst bereitgestellten Daten und der Benutzer diese Felder nicht geändert hat, der automatisch ausgefüllte Wert in den nachfolgenden Aufrufen zurück an den Dienst gesendet wird (und durch Aufrufen android.app.assist.AssistStructure.ViewNode#getAutofillValue()
von abgerufen werden kann). Dies ist nützlich in den Fällen, in denen der Dienst Datasets für eine Partition basierend auf der In einer vorherigen Partition getroffenen Auswahl erstellen muss. Die 1. Antwort für einen Bildschirm mit Anmeldeinformationen und Adresspartitionen kann beispielsweise wie folgt aussehen:
new FillResponse.Builder()
.addDataset(new Dataset.Builder() // partition 1 (credentials)
.setValue(id1, AutofillValue.forText("homer"), createPresentation("homer"))
.setValue(id2, AutofillValue.forText("D'OH!"), createPresentation("password for homer"))
.build())
.addDataset(new Dataset.Builder() // partition 1 (credentials)
.setValue(id1, AutofillValue.forText("flanders"), createPresentation("flanders"))
.setValue(id2, AutofillValue.forText("OkelyDokelyDo"), createPresentation("password for flanders"))
.build())
.setSaveInfo(new SaveInfo.Builder(SaveInfo.SAVE_DATA_TYPE_PASSWORD,
new AutofillId[] { id1, id2 })
.build())
.build();
Wenn der Benutzer dann ausgewählt hat flanders
, erhält der Dienst einen neuen #onFillRequest(FillRequest, CancellationSignal, FillCallback)
Aufruf mit den Werten der Felder id1
und id2
vorgefüllt, sodass der Dienst dann die Adresse für das Flandern-Konto abrufen und Folgendes FillResponse
für die Adresspartition zurückgeben könnte:
new FillResponse.Builder()
.addDataset(new Dataset.Builder() // partition 2 (address)
.setValue(id3, AutofillValue.forText("744 Evergreen Terrace"), createPresentation("744 Evergreen Terrace")) // street
.setValue(id4, AutofillValue.forText("Springfield"), createPresentation("Springfield")) // city
.build())
.setSaveInfo(new SaveInfo.Builder(SaveInfo.SAVE_DATA_TYPE_PASSWORD | SaveInfo.SAVE_DATA_TYPE_ADDRESS,
new AutofillId[] { id1, id2 }) // username and password
.setOptionalIds(new AutofillId[] { id3, id4 }) // state and zipcode
.build())
.build();
Wenn der Dienst mehrere FillResponse
zurückgibt, überschreibt der letzte die vorherige. Aus diesem Grund enthält die SaveInfo
in der 2. Anforderung oben die Informationen für beide Partitionen.
"PackageVerification"><h3>Paketüberprüfung</h3>
Beim automatischen Ausfüllen von App-spezifischen Daten (z. B. Benutzername und Kennwort) muss der Dienst die Authentizität der Anforderung überprüfen, indem er alle Signaturzertifikate der automatisch ausgefüllten App erhält und die Anforderung nur erfüllt, wenn sie mit den Werten übereinstimmen, die beim ersten Speichern der Daten &mdash abgerufen wurden; Eine solche Überprüfung ist erforderlich, um Phishingversuche von Apps zu vermeiden, die mit dem gleichen Paketnamen einer anderen App in das Gerät quergeladen wurden. Hier sehen Sie ein Beispiel, wie Sie dies erreichen, indem Sie die Signaturzertifikate hashen:
private String getCertificatesHash(String packageName) throws Exception {
PackageManager pm = mContext.getPackageManager();
PackageInfo info = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
ArrayList<String> hashes = new ArrayList<>(info.signatures.length);
for (Signature sig : info.signatures) {
byte[] cert = sig.toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(cert);
hashes.add(toHexString(md.digest()));
}
Collections.sort(hashes);
StringBuilder hash = new StringBuilder();
for (int i = 0; i < hashes.size(); i++) {
hash.append(hashes.get(i));
}
return hash.toString();
}
Wenn der Dienst die Signaturzertifikatdaten nicht gespeichert hat, wurden die Daten zum ersten Mal &mdash gespeichert. beispielsweise, weil die Daten von einer früheren Version der App erstellt wurden, die nicht das AutoFill Framework &mdash verwendet hat; Der Dienst sollte den Benutzer warnen, dass die Authentizität der App nicht bestätigt werden kann (siehe ein Beispiel zur Anzeige einer solchen Warnung im Abschnitt Websicherheit unten), und wenn der Benutzer zustimmt, könnte der Dienst die Daten aus den Signatur ceriticates für die zukünftige Verwendung speichern.
"IgnoringViews"><h3>Ansichten ignorieren</h3>
Wenn der Dienst Ansichten findet, die nicht automatisch ausgefüllt werden können (z. B. ein Textfeld, das die Antwort auf eine Captcha-Herausforderung darstellt), sollte er diese Ansichten durch Aufrufen FillResponse.Builder#setIgnoredIds(AutofillId...)
als ignoriert markieren, damit das System keine neue #onFillRequest(FillRequest, CancellationSignal, FillCallback)
auslöst, wenn diese Ansichten fokussiert sind.
"WebSecurity"><h3>Websicherheit</h3>
Beim Behandeln von Anforderungen zum automatischen Ausfüllen, die Webseiten darstellen (in der Regel Anzeigen von Strukturen, deren Stamm android.app.assist.AssistStructure.ViewNode#getClassName()
ein android.webkit.WebView
ist), sollte der Dienst die folgenden Schritte ausführen, um zu überprüfen, ob die Struktur automatisch mit den Daten ausgefüllt werden kann, die der angeforderten App zugeordnet sind:
<ol><li>Verwenden Sie den android.app.assist.AssistStructure.ViewNode#getWebDomain()
, um die Quelle des Dokuments abzurufen. <li>Rufen Sie die kanonische Domäne mithilfe der Liste der öffentlichen Suffixe ab (siehe Beispiel unten). <li>Verwenden Sie Digital Asset Links , um den Paketnamen und den Zertifikatfingerabdruck des Pakets abzurufen, das der kanonischen Domäne entspricht. <li>Stellen Sie sicher, dass der Zertifikatfingerabdruck mit dem vom Paket-Manager zurückgegebenen Wert übereinstimmt (siehe Abschnitt "Paketüberprüfung" oben). </Ol>
Hier sehen Sie ein Beispiel zum Abrufen der kanonischen Domäne mithilfe von Guava:
private static String getCanonicalDomain(String domain) {
InternetDomainName idn = InternetDomainName.from(domain);
while (idn != null && !idn.isTopPrivateDomain()) {
idn = idn.parent();
}
return idn == null ? null : idn.toString();
}
"WebSecurityDisclaimer">
Wenn die Zuordnung zwischen der Webdomäne und dem App-Paket nicht durch die oben genannten Schritte überprüft werden kann, der Dienst jedoch der Ansicht ist, dass es angemessen ist, persistente Anmeldeinformationen auszufüllen, die für die Webdomäne gespeichert sind, sollte der Dienst den Benutzer zuerst über die potenziellen Datenlecks warnen und den Benutzer zur Bestätigung auffordern. Der Dienst könnte z. B.:
<ol><li>Erstellen Sie ein Dataset, das entsperrt werden muss Dataset.Builder#setAuthentication(android.content.IntentSender) authentication
. <li>Schließen Sie die Webdomäne in die benutzerdefinierte Präsentation für ein Dataset.Builder#setValue(AutofillId, AutofillValue, android.widget.RemoteViews) dataset value
. <li>Wenn der Benutzer dieses Dataset auswählt, zeigen Sie einen Haftungsausschlussdialog an, in dem erläutert wird, dass die App Anmeldeinformationen für eine Webdomäne anfordert, aber der Dienst konnte nicht überprüfen, ob die App diese Domäne besitzt. Wenn der Benutzer zustimmt, kann der Dienst das Dataset entsperren. <li>Auf ähnliche Weise sollte der Dienst beim Hinzufügen eines SaveInfo
-Objekts für die Anforderung den obigen Haftungsausschluss in enthalten SaveInfo.Builder#setDescription(CharSequence)
. </Ol>
Das gleiche Verfahren kann auch verwendet werden, wenn die automatisch ausfüllbaren Daten in einem IFRAME
enthalten sind. In diesem Fall generiert die WebView einen neuen Automatischausfüllkontext, wenn ein Knoten innerhalb des IFRAME
fokussiert ist, wobei der Stammknoten das IFRAME
Attribut "s src
" auf android.app.assist.AssistStructure.ViewNode#getWebDomain()
enthält. Ein typischer und legitimer Anwendungsfall für dieses Szenario ist eine Finanz-App, die es dem Benutzer ermöglicht, sich bei verschiedenen Bankkonten anzumelden. Beispielsweise könnte eine Finanz-App my_financial_app
eine WebView verwenden, die Inhalte aus banklogin.my_financial_app.com
lädt, die einen IFRAME
Knoten enthält, dessen src
Attribut lautet login.some_bank.com
. Beim Erfüllen dieser Anforderung könnte der Dienst eine Dataset.Builder#setAuthentication(android.content.IntentSender) authenticated dataset
hinzufügen, deren Präsentation "Benutzername für some_bank.com" und "Kennwort für some_bank.com" anzeigt. Wenn der Benutzer dann auf eine dieser Optionen tippt, zeigt der Dienst das Dialogfeld "Haftungsausschluss" an, in dem erläutert wird, dass die Auswahl dieser Option die login.some_bank.com
Anmeldeinformationen für my_financial_app
freigeben würde. Wenn der Benutzer zustimmt, gibt der Dienst ein entsperrtes Dataset mit den some_bank.com
Anmeldeinformationen zurück.
<b>Hinweis:</b> Der Dienst für das automatische Ausfüllen kann auch bekannte Browser-Apps zu einer Zulassungsliste hinzufügen und die obigen Überprüfungen überspringen, solange der Dienst die Authentizität der Browser-App überprüfen kann, indem er das Signaturzertifikat überprüft.
"MultipleStepsSave"><h3>Speichern, wenn Daten auf mehrere Bildschirme< aufgeteilt werden/h3>
Apps teilen die Benutzerdaten häufig in mehreren Bildschirmen in derselben Aktivität auf, insbesondere bei Aktivitäten, die zum Erstellen eines neuen Benutzerkontos verwendet werden. Der erste Bildschirm fragt beispielsweise nach einem Benutzernamen, und wenn der Benutzername verfügbar ist, wechselt er zu einem zweiten Bildschirm, in dem nach einem Kennwort gefragt wird.
In diesen Situationen ist es schwierig, das Speichern für das automatische Ausfüllen zu behandeln, da der Autoausfülldienst warten muss, bis der Benutzer beide Felder eingibt, bevor die Benutzeroberfläche für automatisches Ausfüllen angezeigt werden kann. Führen Sie jedoch die folgenden Schritte aus:
<ol><li>In der ersten #onFillRequest(FillRequest, CancellationSignal, FillCallback) fill request
fügt der Dienst in der Antwort ein hinzu FillResponse.Builder#setClientState(android.os.Bundle) client state bundle
, das die Automatischausfüll-ID der auf dem Bildschirm vorhandenen Teilfelder enthält. <li>In der zweiten #onFillRequest(FillRequest, CancellationSignal, FillCallback) fill request
ruft der Dienst die FillRequest#getClientState() client state bundle
ab, ruft die in der vorherigen Anforderung festgelegten Automatischausfüll-IDs aus dem Clientstatus ab und fügt diese ID und die SaveInfo#FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE
SaveInfo
der in der zweiten Antwort verwendeten hinzu. <li>In #onSaveRequest(SaveRequest, SaveCallback) save request
verwendet der Dienst den richtigen FillContext fill contexts
, um den Wert jedes Felds abzurufen (es gibt einen Füllkontext pro Füllanforderung). </Ol>
In einer App, die zwei Schritte für die Felder Benutzername und Kennwort verwendet, würde der Workflow beispielsweise wie folgt aussehen:
// On first fill request
AutofillId usernameId = // parse from AssistStructure;
Bundle clientState = new Bundle();
clientState.putParcelable("usernameId", usernameId);
fillCallback.onSuccess(
new FillResponse.Builder()
.setClientState(clientState)
.setSaveInfo(new SaveInfo
.Builder(SaveInfo.SAVE_DATA_TYPE_USERNAME, new AutofillId[] {usernameId})
.build())
.build());
// On second fill request
Bundle clientState = fillRequest.getClientState();
AutofillId usernameId = clientState.getParcelable("usernameId");
AutofillId passwordId = // parse from AssistStructure
clientState.putParcelable("passwordId", passwordId);
fillCallback.onSuccess(
new FillResponse.Builder()
.setClientState(clientState)
.setSaveInfo(new SaveInfo
.Builder(SaveInfo.SAVE_DATA_TYPE_USERNAME | SaveInfo.SAVE_DATA_TYPE_PASSWORD,
new AutofillId[] {usernameId, passwordId})
.setFlags(SaveInfo.FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE)
.build())
.build());
// On save request
Bundle clientState = saveRequest.getClientState();
AutofillId usernameId = clientState.getParcelable("usernameId");
AutofillId passwordId = clientState.getParcelable("passwordId");
List<FillContext> fillContexts = saveRequest.getFillContexts();
FillContext usernameContext = fillContexts.get(0);
ViewNode usernameNode = findNodeByAutofillId(usernameContext.getStructure(), usernameId);
AutofillValue username = usernameNode.getAutofillValue().getTextValue().toString();
FillContext passwordContext = fillContexts.get(1);
ViewNode passwordNode = findNodeByAutofillId(passwordContext.getStructure(), passwordId);
AutofillValue password = passwordNode.getAutofillValue().getTextValue().toString();
save(username, password);
"Privacy"><h3>Privacy</h3>
Die #onFillRequest(FillRequest, CancellationSignal, FillCallback)
-Methode wird ohne den Benutzerinhalt aufgerufen. Das Android-System entfernt einige Eigenschaften der android.app.assist.AssistStructure.ViewNode view nodes
an diesen Aufruf übergebenen, aber nicht alle. Beispielsweise werden die in den android.view.ViewStructure.HtmlInfo
von festgelegten android.webkit.WebView
Objekten bereitgestellten Daten nie entfernt.
Da diese Daten PII (Personenbezogene Informationen, z. B. Benutzername oder E-Mail-Adresse) enthalten können, sollte der Dienst sie nur lokal (d. h. im Prozess der App) für Heuristikzwecke verwenden, aber nicht an externe Server gesendet werden.
"FieldClassification"><h3>Metriken und Feldklassifizierung</h3>
Der Dienst kann aufrufen #getFillEventHistory()
, um Metriken abzurufen, die die Benutzeraktionen darstellen, und dann diese Metriken verwenden, um seine Heuristik zu verbessern.
Vor Android android.os.Build.VERSION_CODES#P
deckten die Metriken nur die Szenarien ab, in denen der Dienst wusste, wie eine Aktivität automatisch ausgefüllt werden kann, aber Android android.os.Build.VERSION_CODES#P
hat einen neuen Mechanismus namens Feldklassifizierung eingeführt, der es dem Dienst ermöglicht, die Bedeutung von Feldern basierend auf den vorhandenen Benutzerdaten, die dem Dienst bekannt sind, dynamisch zu klassifizieren.
In der Regel kann die Feldklassifizierung verwendet werden, um Felder zu erkennen, die automatisch mit Benutzerdaten gefüllt werden können, die keiner bestimmten App&mdash zugeordnet sind. z. B. E-Mail und physische Adresse. Sobald der Dienst erkennt, dass ein solches Feld vom Benutzer manuell ausgefüllt wurde, kann der Dienst dieses Signal verwenden, um seine Heuristik bei nachfolgenden Anforderungen zu verbessern (z. B. durch Rückschlüsse, welche Ressourcen-IDs bekannten Feldern zugeordnet sind).
Der Workflow für die Feldklassifizierung umfasst vier Schritte:
<ol><li>Legen Sie die Benutzerdaten über fest AutofillManager#setUserData(UserData)
. Diese Daten werden zwischengespeichert, bis das System neu gestartet wird (oder der Dienst deaktiviert ist), sodass er nicht für alle Anforderungen festgelegt werden muss. <identifizieren>Sie, welche Felder analysiert werden sollen, indem Sie aufrufen FillResponse.Builder#setFieldClassificationIds(AutofillId...)
. <li>Überprüfen Sie die Ergebnisse über FillEventHistory.Event#getFieldsClassification()
. <li>Verwenden Sie die Ergebnisse, um Objekte in SaveInfo
nachfolgenden Anforderungen dynamisch zu erstellenDataset
. </Ol>
Die Feldklassifizierung ist ein teurer Vorgang und sollte sorgfältig verwendet werden, andernfalls kann sie ihr Ratenlimit erreichen und vom Android-System blockiert werden. Im Idealfall sollte es nur in Fällen verwendet werden, in denen der Dienst nicht bestimmen konnte, wie eine Aktivität automatisch ausgefüllt werden kann, aber ein starker Verdacht besteht, dass es möglich ist. Wenn eine Aktivität beispielsweise über vier oder mehr Felder verfügt und eines davon eine Liste ist, besteht die Wahrscheinlichkeit, dass es sich hierbei um Adressfelder handelt (z. B. Adresse, Ort, Bundesland und Postleitzahl).
"CompatibilityMode"><h3>Kompatibilitätsmodus</h3>
Apps, die Standard-Android-Widgets verwenden, unterstützen das automatische Ausfüllen sofort und müssen nur sehr wenig tun, um die Benutzererfahrung zu verbessern (automatisch ausfüllbare Ansichten kommentieren und Hinweise zum automatischen Ausfüllen bereitstellen). Einige Apps (in der Regel Browser) führen jedoch ihr eigenes Rendering durch, und der gerenderte Inhalt kann eine semantische Struktur enthalten, die dem AutoAusfüllframework angezeigt werden muss. Die Plattform macht apIs verfügbar, um dies zu erreichen. Es kann jedoch einige Zeit dauern, bis diese Apps die Unterstützung für das automatische Ausfüllen implementieren.
Zum Aktivieren des automatischen Ausfüllens für solche Apps stellt die Plattform einen Kompatibilitätsmodus bereit, in dem die Plattform auf die Barrierefreiheits-APIs zurückgreifen würde, um den Status zu generieren, der an Automatische Ausfülldienste gemeldet wird und Daten ausfüllt. Dieser Modus muss für ein bestimmtes Paket bis zu einem angegebenen maximalen Versionscode explizit angefordert werden, der sauber Migrationspfad ermöglicht, wenn die Ziel-App beginnt, das automatische Ausfüllen nativ zu unterstützen. Beachten Sie, dass die Aktivierung der Kompatibilität die Leistung für das Zielpaket beeinträchtigen kann und mit Vorsicht verwendet werden sollte. Die Plattform unterstützt das Erstellen einer Zulassungsliste für die Pakete, die im Kompatibilitätsmodus als Ziel verwendet werden können, um sicherzustellen, dass dieser Modus nur bei Bedarf und so lange wie erforderlich verwendet wird.
Sie können den Kompatibilitätsmodus für pakete von Interesse in der Metadatenressource anfordern, die Ihrem Dienst zugeordnet ist. Im Folgenden finden Sie eine Beispieldienstdeklaration:
<service android:name=".MyAutofillService"
android:permission="android.permission.BIND_AUTOFILL_SERVICE">
<intent-filter>
<action android:name="android.service.autofill.AutofillService" />
</intent-filter>
<meta-data android:name="android.autofill" android:resource="@xml/autofillservice" />
</service>
In der XML-Datei können Sie mindestens ein Paket angeben, für das der Kompatibilitätsmodus aktiviert werden soll. Im Folgenden finden Sie eine Beispiel-Metadatendeklaration:
<autofill-service xmlns:android="http://schemas.android.com/apk/res/android">
<compatibility-package android:name="foo.bar.baz" android:maxLongVersionCode="1000000000"/>
</autofill-service>
Beachten Sie, dass der Kompatibilitätsmodus Einschränkungen aufweist, z <. B. ul><li>Keine manuellen Anforderungen für das automatische Ausfüllen. Daher haben die FillRequest
FillRequest#getFlags() flags
nie die FillRequest#FLAG_MANUAL_REQUEST
Flagge. <li>Der Wert der Kennwortfelder wird höchstwahrscheinlich&mdash maskiert; z. ****
B. anstelle von 1234
. Daher müssen Sie bei der Verwendung dieser Werte vorsichtig sein, um zu vermeiden, dass die Benutzerdaten mit ungültiger Eingabe aktualisiert werden. Wenn Sie z. B. das FillRequest
-Feld analysieren und ein Kennwortfeld erkennen, können Sie überprüfen, ob es android.app.assist.AssistStructure.ViewNode#getInputType() input type
Kennwortflags aufweist, und wenn ja, fügen Sie es nicht dem SaveInfo
-Objekt hinzu. <li>Der AutoAusfüllkontext wird nicht immer AutofillManager#commit() committed
verwendet, wenn ein HTML-Formular übermittelt wird. Daher müssen Sie andere Mechanismen verwenden, um das Speichern auszulösen, z. B. das Festlegen des SaveInfo#FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE
Flags auf SaveInfo.Builder#setFlags(int)
oder die Verwendung von SaveInfo.Builder#setTriggerId(AutofillId)
. <Li-Browser>bieten häufig ein eigenes AutoAusfüll-Managementsystem. Wenn sowohl der Browser als auch die Plattform gleichzeitig einen Automatischausfülldialog rendern, kann das Ergebnis für den Benutzer verwirrend sein. Solche Browser bieten benutzern in der Regel eine Option zum Deaktivieren des automatischen Ausfüllens, sodass Ihr Dienst es Benutzern auch ermöglichen sollte, den Kompatibilitätsmodus für bestimmte Apps zu deaktivieren. Auf diese Weise muss der Benutzer entscheiden, welcher AutoAusfüllmechanismus— die&des Browsers oder der Plattform mdash; sollte verwendet werden. </ul>
Java-Dokumentation für android.service.autofill.AutofillService
.
Teile dieser Seite sind Änderungen, die auf Arbeiten basieren, die vom Android Open Source Project erstellt und freigegeben wurden und gemäß den In Attribution License beschriebenen Begriffen verwendet werden.
Konstruktoren
AutofillService() |
Ein |
AutofillService(IntPtr, JniHandleOwnership) |
Ein |
Felder
AccessibilityService |
Verwenden Sie mit |
AccountService |
Verwenden Sie mit |
ActivityService |
Verwenden Sie mit |
AlarmService |
Verwenden Sie mit |
AppOpsService |
Verwenden Sie mit |
AppSearchService |
Verwenden Sie mit |
AppwidgetService |
Verwenden Sie mit |
AudioService |
Verwenden Sie mit |
BatteryService |
Verwenden Sie mit |
BindAllowActivityStarts |
Veraltet.
Flag für |
BindExternalServiceLong |
Funktioniert auf die gleiche Weise wie |
BindNotPerceptible |
Veraltet.
Flag für |
BindSharedIsolatedProcess |
Veraltet.
Flag für |
BiometricService |
Verwenden Sie mit |
BlobStoreService |
Verwenden Sie mit |
BluetoothService |
Verwenden Sie mit |
BugreportService |
Dienst zum Erfassen eines Fehlerberichts. (Geerbt von Context) |
CameraService |
Verwenden Sie mit |
CaptioningService |
Verwenden Sie mit |
CarrierConfigService |
Verwenden Sie mit |
ClipboardService |
Verwenden Sie mit |
CompanionDeviceService |
Verwenden von mit |
ConnectivityDiagnosticsService |
Verwenden Sie mit |
ConnectivityService |
Verwenden Sie mit |
ConsumerIrService |
Verwenden Sie mit |
CredentialService |
Verwenden Sie mit |
CrossProfileAppsService |
Verwenden Sie mit |
DeviceIdDefault |
Die Standardgeräte-ID, die die ID des primären (nicht virtuellen) Geräts ist. (Geerbt von Context) |
DeviceIdInvalid |
Ungültige Geräte-ID. (Geerbt von Context) |
DeviceLockService |
Verwenden Sie mit |
DevicePolicyService |
Verwenden Sie mit |
DisplayHashService |
Verwenden Sie mit |
DisplayService |
Verwenden Sie mit |
DomainVerificationService |
Verwenden Sie mit |
DownloadService |
Verwenden Sie mit |
DropboxService |
Verwenden Sie mit |
EuiccService |
Verwenden Sie mit |
ExtraFillResponse |
Der Name der |
FileIntegrityService |
Verwenden Sie mit |
FingerprintService |
Verwenden Sie mit |
GameService |
Verwenden Sie mit |
GrammaticalInflectionService |
Verwenden Sie mit |
HardwarePropertiesService |
Verwenden Sie mit |
HealthconnectService |
Verwenden Sie mit |
InputMethodService |
Verwenden Sie mit |
InputService |
Verwenden Sie mit |
IpsecService |
Verwenden Sie mit |
JobSchedulerService |
Verwenden Sie mit |
KeyguardService |
Verwenden Sie mit |
LauncherAppsService |
Verwenden Sie mit |
LayoutInflaterService |
Verwenden Sie mit |
LocaleService |
Verwenden Sie mit |
LocationService |
Verwenden Sie mit |
MediaCommunicationService |
Verwenden von mit |
MediaMetricsService |
Verwenden Sie mit |
MediaProjectionService |
Verwenden Sie mit |
MediaRouterService |
Verwenden Sie mit |
MediaSessionService |
Verwenden Sie mit |
MidiService |
Verwenden Sie mit |
NetworkStatsService |
Verwenden Sie mit |
NfcService |
Verwenden Sie mit |
NotificationService |
Verwenden Sie mit |
NsdService |
Verwenden von mit |
OverlayService |
Verwenden Sie mit |
PeopleService |
Verwenden Sie mit |
PerformanceHintService |
Verwenden Sie mit |
PowerService |
Verwenden Sie mit |
PrintService |
|
ReceiverExported |
Veraltet.
Flag für |
ReceiverNotExported |
Veraltet.
Flag für |
ReceiverVisibleToInstantApps |
Veraltet.
Flag für |
RestrictionsService |
Verwenden Sie mit |
RoleService |
Verwenden Sie mit |
SearchService |
Verwenden Sie mit |
SensorService |
Verwenden Sie mit |
ServiceInterface |
Die |
ServiceMetaData |
Name, unter dem eine AutoFillService-Komponente Informationen über sich selbst veröffentlicht. |
ShortcutService |
Verwenden Sie mit |
StatusBarService |
Verwenden Sie mit |
StopForegroundDetach |
Veraltet.
Selektor für |
StopForegroundLegacy |
Selektor für |
StopForegroundRemove |
Veraltet.
Selektor für |
StorageService |
Verwenden Sie mit |
StorageStatsService |
Verwenden Sie mit |
SystemHealthService |
Verwenden Sie mit |
TelecomService |
Verwenden Sie mit |
TelephonyImsService |
Verwenden Sie mit |
TelephonyService |
Verwenden Sie mit |
TelephonySubscriptionService |
Verwenden Sie mit |
TextClassificationService |
Verwenden Sie mit |
TextServicesManagerService |
Verwenden Sie mit |
TvInputService |
Verwenden Sie mit |
TvInteractiveAppService |
Verwenden Sie mit |
UiModeService |
Verwenden Sie mit |
UsageStatsService |
Verwenden Sie mit |
UsbService |
Verwenden Sie mit |
UserService |
Verwenden Sie mit |
VibratorManagerService |
Verwenden Sie mit |
VibratorService |
Verwenden Sie mit |
VirtualDeviceService |
Verwenden Sie mit |
VpnManagementService |
Verwenden Sie mit |
WallpaperService |
Verwenden Sie mit |
WifiAwareService |
Verwenden Sie mit |
WifiP2pService |
Verwenden Sie mit |
WifiRttRangingService |
Verwenden Sie mit |
WifiService |
Verwenden Sie mit |
WindowService |
Verwenden Sie mit |
Eigenschaften
Application |
Gibt die Anwendung zurück, die diesen Dienst besitzt. (Geerbt von Service) |
ApplicationContext |
Gibt den Kontext des einzelnen, globalen Application-Objekts des aktuellen Prozesses zurück. (Geerbt von ContextWrapper) |
ApplicationInfo |
Gibt die vollständigen Anwendungsinformationen für das Paket dieses Kontexts zurück. (Geerbt von ContextWrapper) |
Assets |
Zurückgeben eines AssetManager-instance für das Anwendungspaket. (Geerbt von ContextWrapper) |
AttributionSource |
Ein |
AttributionTag |
Die Zuordnung kann in komplexen Apps verwendet werden, um Teile der App logisch voneinander zu trennen. (Geerbt von Context) |
BaseContext | (Geerbt von ContextWrapper) |
CacheDir |
Gibt den absoluten Pfad zum anwendungsspezifischen Cacheverzeichnis im Dateisystem zurück. (Geerbt von ContextWrapper) |
Class |
Gibt die Laufzeitklasse dieses |
ClassLoader |
Gibt ein Klassenladeprogramm zurück, mit dem Sie Klassen in diesem Paket abrufen können. (Geerbt von ContextWrapper) |
CodeCacheDir |
Gibt den absoluten Pfad zum anwendungsspezifischen Cacheverzeichnis im Dateisystem zurück, das zum Speichern von zwischengespeichertem Code entwickelt wurde. (Geerbt von ContextWrapper) |
ContentResolver |
Zurückgeben eines ContentResolver-instance für das Anwendungspaket. (Geerbt von ContextWrapper) |
DataDir |
Ein |
DeviceId |
Ruft die Geräte-ID ab, der dieser Kontext zugeordnet ist. (Geerbt von Context) |
Display |
Rufen Sie die Anzeige ab, mit der dieser Kontext verknüpft ist. (Geerbt von Context) |
ExternalCacheDir |
Gibt den absoluten Pfad zum Verzeichnis im primären externen Dateisystem zurück (das ist ein Ort, an ExternalStorageDirectory dem die Anwendung Cachedateien platzieren kann, die ihr gehören). (Geerbt von ContextWrapper) |
FilesDir |
Gibt den absoluten Pfad zu dem Verzeichnis im Dateisystem zurück, in dem mit OpenFileOutput(String, FileCreationMode) erstellte Dateien gespeichert werden. (Geerbt von ContextWrapper) |
FillEventHistory |
Ruft die Ereignisse ab, die nach dem letzten aufgetreten sind. |
ForegroundServiceType |
Wenn der Dienst durch Aufrufen von zu einem Vordergrunddienst geworden ist |
Handle |
Das Handle für die zugrunde liegende Android-instance. (Geerbt von Object) |
IsDeviceProtectedStorage |
Ein |
IsRestricted |
Gibt an, ob dieser Kontext eingeschränkt ist. (Geerbt von Context) |
IsUiContext |
Gibt zurück |
JniIdentityHashCode |
Ein |
JniPeerMembers |
Ein |
MainExecutor |
Gibt einen |
MainLooper |
Gibt den Looper für den Standard Thread des aktuellen Prozesses zurück. (Geerbt von ContextWrapper) |
NoBackupFilesDir |
Gibt den absoluten Pfad zum Verzeichnis im Dateisystem ähnlich wie zurück FilesDir. (Geerbt von ContextWrapper) |
ObbDir |
Geben Sie das primäre externe Speicherverzeichnis zurück, in dem die OBB-Dateien dieser Anwendung (falls vorhanden) gefunden werden können. (Geerbt von ContextWrapper) |
OpPackageName |
Gibt den Paketnamen zurück, der für |
PackageCodePath |
Geben Sie den vollständigen Pfad zum primären Android-Paket dieses Kontexts zurück. (Geerbt von ContextWrapper) |
PackageManager |
Geben Sie packageManager instance zurück, um nach globalen Paketinformationen zu suchen. (Geerbt von ContextWrapper) |
PackageName |
Gibt den Namen des Anwendungspakets zurück. (Geerbt von ContextWrapper) |
PackageResourcePath |
Geben Sie den vollständigen Pfad zum primären Android-Paket dieses Kontexts zurück. (Geerbt von ContextWrapper) |
Params |
Gibt den Satz von Parametern zurück, mit dem dieser Kontext erstellt wurde, wenn er über |
PeerReference |
Ein |
Resources |
Geben Sie einen Ressourcen-instance für das Paket Ihrer Anwendung zurück. (Geerbt von ContextWrapper) |
Theme |
Gibt das Theme-Objekt zurück, das diesem Kontext zugeordnet ist. (Geerbt von ContextWrapper) |
ThresholdClass |
Ein |
ThresholdType |
Ein |
Wallpaper | (Geerbt von ContextWrapper) |
WallpaperDesiredMinimumHeight | (Geerbt von ContextWrapper) |
WallpaperDesiredMinimumWidth | (Geerbt von ContextWrapper) |
Methoden
AttachBaseContext(Context) |
Legen Sie den Basiskontext für diesen ContextWrapper fest. (Geerbt von ContextWrapper) |
BindService(Intent, Bind, IExecutor, IServiceConnection) |
|
BindService(Intent, Context+BindServiceFlags, IExecutor, IServiceConnection) |
Ein |
BindService(Intent, IServiceConnection, Bind) |
Stellen Sie eine Verbindung mit einem Anwendungsdienst her, und erstellen Sie ihn bei Bedarf. (Geerbt von ContextWrapper) |
BindService(Intent, IServiceConnection, Context+BindServiceFlags) |
Ein |
BindServiceAsUser(Intent, IServiceConnection, Context+BindServiceFlags, UserHandle) |
Ein |
BindServiceAsUser(Intent, IServiceConnection, Int32, UserHandle) |
Bindet an einen Dienst im angegebenen |
CheckCallingOrSelfPermission(String) |
Bestimmen Sie, ob dem Aufrufprozess eines IPC oder Ihnen eine bestimmte Berechtigung erteilt wurde. (Geerbt von ContextWrapper) |
CheckCallingOrSelfUriPermission(Uri, ActivityFlags) |
Ermitteln Sie, ob dem aufrufenden Prozess eines IPC oder Ihnen die Berechtigung für den Zugriff auf einen bestimmten URI erteilt wurde. (Geerbt von ContextWrapper) |
CheckCallingOrSelfUriPermissions(IList<Uri>, Int32) |
Ermitteln Sie, ob dem Aufrufprozess eines IPC <em>oder Sie</em> die Berechtigung für den Zugriff auf eine Liste von URIs erteilt wurde. (Geerbt von Context) |
CheckCallingPermission(String) |
Ermitteln Sie, ob dem Aufrufprozess eines von Ihnen verarbeiteten IPC eine bestimmte Berechtigung erteilt wurde. (Geerbt von ContextWrapper) |
CheckCallingUriPermission(Uri, ActivityFlags) |
Ermitteln Sie, ob dem aufrufenden Prozess und der Benutzer-ID die Berechtigung für den Zugriff auf einen bestimmten URI erteilt wurde. (Geerbt von ContextWrapper) |
CheckCallingUriPermissions(IList<Uri>, Int32) |
Ermitteln Sie, ob dem aufrufenden Prozess und der Benutzer-ID die Berechtigung für den Zugriff auf eine Liste von URIs erteilt wurde. (Geerbt von Context) |
CheckPermission(String, Int32, Int32) |
Bestimmen Sie, ob die angegebene Berechtigung für einen bestimmten Prozess und die Benutzer-ID zulässig ist, die im System ausgeführt wird. (Geerbt von ContextWrapper) |
CheckSelfPermission(String) |
Ein |
CheckUriPermission(Uri, Int32, Int32, ActivityFlags) |
Ermitteln Sie, ob einem bestimmten Prozess und einer bestimmten Benutzer-ID die Berechtigung für den Zugriff auf einen bestimmten URI erteilt wurde. (Geerbt von ContextWrapper) |
CheckUriPermission(Uri, String, String, Int32, Int32, ActivityFlags) |
Überprüfen Sie sowohl einen URI als auch eine normale Berechtigung. (Geerbt von ContextWrapper) |
CheckUriPermissions(IList<Uri>, Int32, Int32, Int32) |
Ermitteln Sie, ob einem bestimmten Prozess und einer bestimmten Benutzer-ID die Berechtigung für den Zugriff auf eine Liste von URIs erteilt wurde. (Geerbt von Context) |
ClearWallpaper() |
Veraltet.
(Geerbt von ContextWrapper)
|
Clone() |
Erstellt und gibt eine Kopie dieses Objekts zurück. (Geerbt von Object) |
CreateAttributionContext(String) |
Gibt ein neues Context-Objekt für den aktuellen Context zurück, aber ein Attribut an ein anderes Tag. (Geerbt von Context) |
CreateConfigurationContext(Configuration) |
Gibt ein neues Context-Objekt für den aktuellen Context zurück, dessen Ressourcen jedoch an die angegebene Konfiguration angepasst werden. (Geerbt von ContextWrapper) |
CreateContext(ContextParams) |
Erstellt einen Kontext mit bestimmten Eigenschaften und Verhaltensweisen. (Geerbt von Context) |
CreateContextForSplit(String) |
Ein |
CreateDeviceContext(Int32) |
Gibt ein neues |
CreateDeviceProtectedStorageContext() |
Ein |
CreateDisplayContext(Display) |
Gibt ein neues Context-Objekt für den aktuellen Context zurück, dessen Ressourcen jedoch an die Metriken der angegebenen Anzeige angepasst werden. (Geerbt von ContextWrapper) |
CreatePackageContext(String, PackageContextFlags) |
Gibt ein neues Context-Objekt für den angegebenen Anwendungsnamen zurück. (Geerbt von ContextWrapper) |
CreateWindowContext(Display, Int32, Bundle) |
Erstellt einen |
CreateWindowContext(Int32, Bundle) |
Erstellt einen Kontext für ein Nicht-Aktivitätsfenster. (Geerbt von Context) |
DatabaseList() |
Gibt ein Array von Zeichenfolgen zurück, in dem die privaten Datenbanken benannt werden, die dem Anwendungspaket dieses Kontexts zugeordnet sind. (Geerbt von ContextWrapper) |
DeleteDatabase(String) |
Löschen Sie eine vorhandene private SQLiteDatabase, die dem Anwendungspaket dieses Kontexts zugeordnet ist. (Geerbt von ContextWrapper) |
DeleteFile(String) |
Löschen Sie die angegebene private Datei, die dem Anwendungspaket dieses Kontexts zugeordnet ist. (Geerbt von ContextWrapper) |
DeleteSharedPreferences(String) |
Ein |
Dispose() |
Ein |
Dispose(Boolean) |
Ein |
Dump(FileDescriptor, PrintWriter, String[]) |
Geben Sie den Status des Diensts in den angegebenen Stream aus. (Geerbt von Service) |
EnforceCallingOrSelfPermission(String, String) |
Wenn weder Ihnen noch dem Aufrufprozess eines von Ihnen verarbeiteten IPC eine bestimmte Berechtigung erteilt wurde, lösen Sie eine SecurityExceptionaus. (Geerbt von ContextWrapper) |
EnforceCallingOrSelfUriPermission(Uri, ActivityFlags, String) |
Wenn dem aufrufenden Prozess eines IPC oder Ihnen keine Berechtigung für den Zugriff auf einen bestimmten URI erteilt wurde, lösen Sie aus SecurityException. (Geerbt von ContextWrapper) |
EnforceCallingPermission(String, String) |
Wenn dem aufrufenden Prozess einer von Ihnen verarbeiteten IPC keine bestimmte Berechtigung erteilt wurde, lösen Sie eine SecurityExceptionaus. (Geerbt von ContextWrapper) |
EnforceCallingUriPermission(Uri, ActivityFlags, String) |
Wenn dem aufrufenden Prozess und der Benutzer-ID keine Berechtigung für den Zugriff auf einen bestimmten URI erteilt wurde, lösen Sie aus SecurityException. (Geerbt von ContextWrapper) |
EnforcePermission(String, Int32, Int32, String) |
Wenn die angegebene Berechtigung für einen bestimmten Prozess und die Benutzer-ID, die im System ausgeführt wird, nicht zulässig ist, lösen Sie eine aus SecurityException. (Geerbt von ContextWrapper) |
EnforceUriPermission(Uri, Int32, Int32, ActivityFlags, String) |
Wenn einem bestimmten Prozess und einer bestimmten Benutzer-ID keine Berechtigung für den Zugriff auf einen bestimmten URI erteilt wurde, lösen Sie aus SecurityException. (Geerbt von ContextWrapper) |
EnforceUriPermission(Uri, String, String, Int32, Int32, ActivityFlags, String) |
Erzwingen Sie sowohl einen URI als auch eine normale Berechtigung. (Geerbt von ContextWrapper) |
Equals(Object) |
Gibt an, ob ein anderes Objekt "gleich" diesem objekt ist. (Geerbt von Object) |
FileList() |
Gibt ein Array von Zeichenfolgen zurück, in dem die privaten Dateien benannt werden, die dem Anwendungspaket dieses Kontexts zugeordnet sind. (Geerbt von ContextWrapper) |
GetColor(Int32) |
Gibt eine Farbe zurück, die einer bestimmten Ressourcen-ID zugeordnet ist und für das aktuelle Design formatiert ist. (Geerbt von Context) |
GetColorStateList(Int32) |
Gibt eine Farbzustandsliste zurück, die einer bestimmten Ressourcen-ID zugeordnet ist und für das aktuelle Design formatiert ist. (Geerbt von Context) |
GetDatabasePath(String) |
Ein |
GetDir(String, FileCreationMode) |
Rufen Sie bei Bedarf ein neues Verzeichnis ab, in dem die Anwendung ihre eigenen benutzerdefinierten Datendateien platzieren kann. (Geerbt von ContextWrapper) |
GetDrawable(Int32) |
Gibt ein ziehbares Objekt zurück, das einer bestimmten Ressourcen-ID zugeordnet und für das aktuelle Design formatiert ist. (Geerbt von Context) |
GetExternalCacheDirs() |
Gibt absolute Pfade zu anwendungsspezifischen Verzeichnissen auf allen externen Speichergeräten zurück, auf denen die Anwendung Cachedateien speichern kann, die ihr gehören. (Geerbt von ContextWrapper) |
GetExternalFilesDir(String) |
Gibt den absoluten Pfad zum Verzeichnis im primären externen Dateisystem (also irgendwo unter ExternalStorageDirectory) zurück, in dem die Anwendung persistente Dateien speichern kann, die ihr gehören. (Geerbt von ContextWrapper) |
GetExternalFilesDirs(String) |
Gibt absolute Pfade zu anwendungsspezifischen Verzeichnissen auf allen externen Speichergeräten zurück, auf denen die Anwendung persistente Dateien platzieren kann, die ihr gehören. (Geerbt von ContextWrapper) |
GetExternalMediaDirs() |
Veraltet.
Gibt absolute Pfade zu anwendungsspezifischen Verzeichnissen auf allen externen Speichergeräten zurück, auf denen die Anwendung Mediendateien platzieren kann. (Geerbt von ContextWrapper) |
GetFileStreamPath(String) |
Gibt den absoluten Pfad im Dateisystem zurück, in dem eine datei gespeichert ist, die mit OpenFileOutput(String, FileCreationMode) erstellt wurde. (Geerbt von ContextWrapper) |
GetHashCode() |
Gibt einen Hashcodewert für das Objekt zurück. (Geerbt von Object) |
GetObbDirs() |
Gibt absolute Pfade zu anwendungsspezifischen Verzeichnissen auf allen externen Speichergeräten zurück, auf denen die OBB-Dateien der Anwendung (sofern vorhanden) gefunden werden können. (Geerbt von ContextWrapper) |
GetSharedPreferences(String, FileCreationMode) |
Rufen Sie den Inhalt der Einstellungsdatei "name" ab, und speichern Sie sie, und geben Sie einen SharedPreferences zurück, über den Sie die Werte abrufen und ändern können. (Geerbt von ContextWrapper) |
GetString(Int32) |
Gibt eine lokalisierte Zeichenfolge aus der Standardzeichenfolgentabelle des Anwendungspakets zurück. (Geerbt von Context) |
GetString(Int32, Object[]) |
Gibt eine lokalisierte Zeichenfolge aus der Standardzeichenfolgentabelle des Anwendungspakets zurück. (Geerbt von Context) |
GetSystemService(Class) |
Zurückgeben des Handles an einen Dienst auf Systemebene nach Klasse. (Geerbt von Context) |
GetSystemService(String) |
Gibt das Handle anhand des Namens an einen Dienst auf Systemebene zurück. (Geerbt von ContextWrapper) |
GetSystemServiceName(Class) |
Ein |
GetText(Int32) |
Gibt einen lokalisierten, formatierten CharSequence aus der Standardzeichenfolgentabelle des Anwendungspakets zurück. (Geerbt von Context) |
GetTextFormatted(Int32) |
Gibt einen lokalisierten, formatierten CharSequence aus der Standardzeichenfolgentabelle des Anwendungspakets zurück. (Geerbt von Context) |
GrantUriPermission(String, Uri, ActivityFlags) |
Erteilen Sie einem anderen Paket die Berechtigung für den Zugriff auf einen bestimmten URI, unabhängig davon, ob dieses Paket über die allgemeine Berechtigung für den Zugriff auf den Inhaltsanbieter des URI verfügt. (Geerbt von ContextWrapper) |
JavaFinalize() |
Wird vom Garbage Collector für ein Objekt aufgerufen, wenn die Garbage Collection feststellt, dass keine Verweise mehr auf das Objekt vorhanden sind. (Geerbt von Object) |
MoveDatabaseFrom(Context, String) |
Ein |
MoveSharedPreferencesFrom(Context, String) |
Ein |
Notify() |
Aktiviert einen einzelnen Thread, der auf den Monitor dieses Objekts wartet. (Geerbt von Object) |
NotifyAll() |
Aktiviert alle Threads, die auf den Monitor dieses Objekts warten. (Geerbt von Object) |
ObtainStyledAttributes(IAttributeSet, Int32[]) |
Rufen Sie formatierte Attributinformationen im Design dieses Kontexts ab. (Geerbt von Context) |
ObtainStyledAttributes(IAttributeSet, Int32[], Int32, Int32) |
Rufen Sie formatierte Attributinformationen im Design dieses Kontexts ab. (Geerbt von Context) |
ObtainStyledAttributes(Int32, Int32[]) |
Rufen Sie formatierte Attributinformationen im Design dieses Kontexts ab. (Geerbt von Context) |
ObtainStyledAttributes(Int32[]) |
Rufen Sie formatierte Attributinformationen im Design dieses Kontexts ab. (Geerbt von Context) |
OnBind(Intent) |
Ein |
OnConfigurationChanged(Configuration) |
Wird vom System aufgerufen, wenn sich die Gerätekonfiguration ändert, während Ihre Komponente ausgeführt wird. (Geerbt von Service) |
OnConnected() |
Wird aufgerufen, wenn das Android-System eine Verbindung mit dem Dienst herstellt. |
OnCreate() |
Wird vom System aufgerufen, wenn der Dienst zum ersten Mal erstellt wird. (Geerbt von Service) |
OnDestroy() |
Wird vom System aufgerufen, um einen Dienst zu benachrichtigen, dass er nicht mehr verwendet wird und entfernt wird. (Geerbt von Service) |
OnDisconnected() |
Wird aufgerufen, wenn das Android-System die Verbindung mit dem Dienst trennt. |
OnFillRequest(FillRequest, CancellationSignal, FillCallback) |
Vom Android-System aufgerufen, entscheiden Sie, ob ein Bildschirm automatisch vom Dienst ausgefüllt werden kann. |
OnLowMemory() |
Dies wird aufgerufen, wenn das Gesamtsystem über wenig Arbeitsspeicher verfügt und aktiv ausgeführte Prozesse ihre Arbeitsspeicherauslastung verringern sollten. (Geerbt von Service) |
OnRebind(Intent) |
Wird aufgerufen, wenn neue Clients eine Verbindung mit dem Dienst hergestellt haben, nachdem zuvor benachrichtigt wurde, dass alle in seinem |
OnSavedDatasetsInfoRequest(ISavedDatasetsInfoCallback) |
Wird aus den Systemeinstellungen aufgerufen, um Informationen zu den Datasets anzuzeigen, die der Benutzer in diesem Dienst gespeichert hat. |
OnSaveRequest(SaveRequest, SaveCallback) |
Wird aufgerufen, wenn der Benutzer den Dienst anfordert, den Inhalt eines Bildschirms zu speichern. |
OnStart(Intent, Int32) |
Veraltet.
Dieses Member ist veraltet. (Geerbt von Service) |
OnStartCommand(Intent, StartCommandFlags, Int32) |
Wird vom System jedes Mal aufgerufen, wenn ein Client den Dienst explizit startet, indem er aufruft |
OnTaskRemoved(Intent) |
Dies wird aufgerufen, wenn der Dienst derzeit ausgeführt wird und der Benutzer eine Aufgabe aus der Anwendung des Diensts entfernt hat. (Geerbt von Service) |
OnTimeout(Int32) |
Rückruf bei Timeout für |
OnTrimMemory(TrimMemory) |
Wird aufgerufen, wenn das Betriebssystem festgestellt hat, dass es ein guter Zeitpunkt für einen Prozess ist, nicht benötigten Arbeitsspeicher aus seinem Prozess zu kürzen. (Geerbt von Service) |
OnUnbind(Intent) |
Wird aufgerufen, wenn alle Clients die Verbindung mit einer bestimmten Schnittstelle getrennt haben, die vom Dienst veröffentlicht wurde. (Geerbt von Service) |
OpenFileInput(String) |
Öffnen Sie eine private Datei, die dem Anwendungspaket dieses Kontexts zum Lesen zugeordnet ist. (Geerbt von ContextWrapper) |
OpenFileOutput(String, FileCreationMode) |
Öffnen Sie eine private Datei, die dem Anwendungspaket dieses Kontexts zum Schreiben zugeordnet ist. (Geerbt von ContextWrapper) |
OpenOrCreateDatabase(String, FileCreationMode, SQLiteDatabase+ICursorFactory) |
Öffnen Sie eine neue private SQLiteDatabase, die dem Anwendungspaket dieses Kontexts zugeordnet ist. (Geerbt von ContextWrapper) |
OpenOrCreateDatabase(String, FileCreationMode, SQLiteDatabase+ICursorFactory, IDatabaseErrorHandler) |
Öffnen Sie eine neue private SQLiteDatabase, die dem Anwendungspaket dieses Kontexts zugeordnet ist. (Geerbt von ContextWrapper) |
PeekWallpaper() |
Veraltet.
(Geerbt von ContextWrapper)
|
RegisterComponentCallbacks(IComponentCallbacks) |
Fügen Sie der Basisanwendung des Kontexts eine neue |
RegisterDeviceIdChangeListener(IExecutor, IIntConsumer) |
Fügt dem einen neuen geänderten Listener der Geräte-ID hinzu, der |
RegisterReceiver(BroadcastReceiver, IntentFilter) |
Registrieren Sie einen BroadcastReceiver, der im Standard-Aktivitätsthread ausgeführt werden soll. (Geerbt von ContextWrapper) |
RegisterReceiver(BroadcastReceiver, IntentFilter, ActivityFlags) |
Veraltet.
Ein |
RegisterReceiver(BroadcastReceiver, IntentFilter, ReceiverFlags) |
Ein |
RegisterReceiver(BroadcastReceiver, IntentFilter, String, Handler) |
Registrieren Sie sich, um Absichtsübertragungen zu empfangen, um sie im Kontext von Scheduler auszuführen. (Geerbt von ContextWrapper) |
RegisterReceiver(BroadcastReceiver, IntentFilter, String, Handler, ActivityFlags) |
Veraltet.
Ein |
RegisterReceiver(BroadcastReceiver, IntentFilter, String, Handler, ReceiverFlags) |
Ein |
RemoveStickyBroadcast(Intent) |
Veraltet.
(Geerbt von ContextWrapper)
|
RemoveStickyBroadcastAsUser(Intent, UserHandle) |
Veraltet.
(Geerbt von ContextWrapper)
|
RevokeSelfPermissionOnKill(String) |
Löst den asynchronen Widerruf einer Laufzeitberechtigung aus. (Geerbt von Context) |
RevokeSelfPermissionsOnKill(ICollection<String>) |
Löst den Widerruf einer oder mehrerer Berechtigungen für das aufrufende Paket aus. (Geerbt von Context) |
RevokeUriPermission(String, Uri, ActivityFlags) |
Ein |
RevokeUriPermission(Uri, ActivityFlags) |
Entfernen Sie alle Berechtigungen für den Zugriff auf einen bestimmten Inhaltsanbieter-URI, die zuvor mit M:Android.Content.Context.GrantUriPermission(System.String,Android.Net.Uri,Android.Net.Uri)hinzugefügt wurden. (Geerbt von ContextWrapper) |
SendBroadcast(Intent) |
Übertragen Sie die angegebene Absicht an alle interessierten BroadcastReceivers. (Geerbt von ContextWrapper) |
SendBroadcast(Intent, String) |
Übertragen Sie die angegebene Absicht an alle interessierten BroadcastReceivers, sodass eine optionale erforderliche Berechtigung erzwungen werden kann. (Geerbt von ContextWrapper) |
SendBroadcast(Intent, String, Bundle) |
Übertragen Sie die angegebene Absicht an alle interessierten BroadcastReceivers, sodass eine optionale erforderliche Berechtigung erzwungen werden kann. (Geerbt von Context) |
SendBroadcastAsUser(Intent, UserHandle) |
Version von, mit der SendBroadcast(Intent) Sie den Benutzer angeben können, an den die Übertragung gesendet wird. (Geerbt von ContextWrapper) |
SendBroadcastAsUser(Intent, UserHandle, String) |
Version von, mit der SendBroadcast(Intent, String) Sie den Benutzer angeben können, an den die Übertragung gesendet wird. (Geerbt von ContextWrapper) |
SendBroadcastWithMultiplePermissions(Intent, String[]) |
Übertragen Sie die angegebene Absicht an alle interessierten BroadcastReceivers, sodass ein Array der erforderlichen Berechtigungen erzwungen werden kann. (Geerbt von Context) |
SendOrderedBroadcast(Intent, Int32, String, String, BroadcastReceiver, Handler, String, Bundle, Bundle) |
Ein |
SendOrderedBroadcast(Intent, String) |
Ein |
SendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, Result, String, Bundle) |
Version von, mit der SendBroadcast(Intent) Sie Daten aus der Übertragung zurückerhalten können. (Geerbt von ContextWrapper) |
SendOrderedBroadcast(Intent, String, Bundle) |
Übertragen Sie die angegebene Absicht an alle interessierten BroadcastReceivers, und übermitteln Sie sie einzeln, damit mehr bevorzugte Empfänger die Übertragung nutzen können, bevor sie an weniger bevorzugte Empfänger übermittelt wird. (Geerbt von Context) |
SendOrderedBroadcast(Intent, String, Bundle, BroadcastReceiver, Handler, Result, String, Bundle) |
Version von, mit der |
SendOrderedBroadcast(Intent, String, String, BroadcastReceiver, Handler, Result, String, Bundle) |
Version von, mit der |
SendOrderedBroadcastAsUser(Intent, UserHandle, String, BroadcastReceiver, Handler, Result, String, Bundle) |
Ein |
SendStickyBroadcast(Intent) |
Veraltet.
Führen Sie eine |
SendStickyBroadcast(Intent, Bundle) |
Führen Sie eine |
SendStickyBroadcastAsUser(Intent, UserHandle) |
Veraltet.
(Geerbt von ContextWrapper)
|
SendStickyOrderedBroadcast(Intent, BroadcastReceiver, Handler, Result, String, Bundle) |
Veraltet.
(Geerbt von ContextWrapper)
|
SendStickyOrderedBroadcastAsUser(Intent, UserHandle, BroadcastReceiver, Handler, Result, String, Bundle) |
Veraltet.
(Geerbt von ContextWrapper)
|
SetForeground(Boolean) |
Dieses Member ist veraltet. (Geerbt von Service) |
SetHandle(IntPtr, JniHandleOwnership) |
Legt die Handle-Eigenschaft fest. (Geerbt von Object) |
SetTheme(Int32) |
Legen Sie das Basisdesign für diesen Kontext fest. (Geerbt von ContextWrapper) |
SetWallpaper(Bitmap) |
Veraltet.
(Geerbt von ContextWrapper)
|
SetWallpaper(Stream) |
Veraltet.
(Geerbt von ContextWrapper)
|
StartActivities(Intent[]) |
Identisch mit StartActivities(Intent[], Bundle) ohne angabe von Optionen. (Geerbt von ContextWrapper) |
StartActivities(Intent[], Bundle) |
Starten Sie mehrere neue Aktivitäten. (Geerbt von ContextWrapper) |
StartActivity(Intent) |
Identisch mit StartActivity(Intent, Bundle) ohne angabe von Optionen. (Geerbt von ContextWrapper) |
StartActivity(Intent, Bundle) |
Starten Sie eine neue Aktivität. (Geerbt von ContextWrapper) |
StartActivity(Type) |
Ein |
StartForeground(Int32, Notification) |
Wenn Ihr Dienst gestartet wird (wird über |
StartForeground(Int32, Notification, ForegroundService) |
Eine überladene Version von |
StartForegroundService(Intent) |
Ein |
StartInstrumentation(ComponentName, String, Bundle) |
Beginnen Sie mit der Ausführung einer Instrumentation Klasse. (Geerbt von ContextWrapper) |
StartIntentSender(IntentSender, Intent, ActivityFlags, ActivityFlags, Int32) |
Ein |
StartIntentSender(IntentSender, Intent, ActivityFlags, ActivityFlags, Int32, Bundle) |
Wie StartActivity(Intent, Bundle), aber verwenden Sie einen IntentSender, um zu starten. (Geerbt von ContextWrapper) |
StartService(Intent) |
Fordern Sie an, dass ein bestimmter Anwendungsdienst gestartet wird. (Geerbt von ContextWrapper) |
StopForeground(Boolean) |
Legacyversion von |
StopForeground(StopForegroundFlags) |
Entfernen Sie diesen Dienst aus dem Vordergrundzustand, sodass er beendet werden kann, wenn mehr Arbeitsspeicher benötigt wird. (Geerbt von Service) |
StopSelf() |
Beenden Sie den Dienst, wenn er zuvor gestartet wurde. (Geerbt von Service) |
StopSelf(Int32) |
Alte Version von |
StopSelfResult(Int32) |
Beenden Sie den Dienst, wenn der letzte Startzeitpunkt var>startId</var> war<. (Geerbt von Service) |
StopService(Intent) |
Fordern Sie an, dass ein bestimmter Anwendungsdienst beendet wird. (Geerbt von ContextWrapper) |
ToArray<T>() |
Ein |
ToString() |
Gibt eine Zeichenfolgendarstellung des Objekts zurück. (Geerbt von Object) |
UnbindService(IServiceConnection) |
Trennen Sie die Verbindung mit einem Anwendungsdienst. (Geerbt von ContextWrapper) |
UnregisterComponentCallbacks(IComponentCallbacks) |
Entfernen Sie ein |
UnregisterDeviceIdChangeListener(IIntConsumer) |
Entfernt einen geänderten Listener der Geräte-ID aus dem Kontext. (Geerbt von Context) |
UnregisterFromRuntime() |
Ein |
UnregisterReceiver(BroadcastReceiver) |
Heben Sie die Registrierung einer zuvor registrierten BroadcastReceiver-Datei auf. (Geerbt von ContextWrapper) |
UpdateServiceGroup(IServiceConnection, Int32, Int32) |
Für einen Dienst, der zuvor an |
Wait() |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch <>Benachrichtigung</em> oder <em>interrupted</em>. (Geerbt von Object) |
Wait(Int64) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Wait(Int64, Int32) |
Bewirkt, dass der aktuelle Thread wartet, bis er aktiviert ist, in der Regel durch>< Benachrichtigung</em> oder <em>interrupted</em>, oder bis eine bestimmte Menge an Echtzeit verstrichen ist. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
IJavaPeerable.Disposed() |
Ein |
IJavaPeerable.DisposeUnlessReferenced() |
Ein |
IJavaPeerable.Finalized() |
Ein |
IJavaPeerable.JniManagedPeerState |
Ein |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Ein |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Ein |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Ein |
Erweiterungsmethoden
JavaCast<TResult>(IJavaObject) |
Führt eine Typkonvertierung mit Überprüfung der Android-Laufzeit aus. |
JavaCast<TResult>(IJavaObject) |
Ein |
GetJniTypeName(IJavaPeerable) |
Ein |