2009-11-29 6 views
11

In einer Android-Dienstprogrammklasse möchte ich einen Systemvoreinstellungswert in einer Klasse abrufen, aber ich habe dort den Kontext nicht, da die Klasse, die sie aufruft, nicht über die Kontext entweder. Ich habe gefunden, dass man für Resources die statische Resources.getSystem() Funktion verwenden kann. Gibt es eine ähnliche Möglichkeit, Systempräferenzen ohne Kontext zu erhalten?Android-Systemeinstellungen ohne Kontext abrufen

Meine Klasse ist keine Aktivität oder Dienstleistung. Es ist eine Nutzungsklasse. Könnte bei Bedarf mehr Informationen geben.

+0

Aus Neugier, bin ich in der exakt gleichen Situation wie Sie jetzt. Darf ich ein bisschen Licht auf das werfen, was Sie letztendlich entschieden haben? – camperdave

Antwort

7

Sie müssen es einen Kontext senden - versuchen Sie nicht, von Ihren Verantwortlichkeiten wegzulaufen. :) Ihre Dienstprogrammklasse muss auf einer bestimmten Ebene von einer Aktivität oder einem Dienst aufgerufen werden, und Sie müssen diesen Kontext bei jedem Methodenaufruf auf der ganzen Linie übergeben. Ich weiß, es ist nervig, ich musste selbst ähnliche Dinge tun. Betrachten Sie es als Ansporn, Ihren Code einfach zu halten und möglichst wenige Methodenaufrufe zu erfordern, um etwas zu erreichen.

+0

Nein, es geht nicht um Faulheit. Ich passe das gesamte Android an, und diese Klasse wird von einer internen Android-Klasse aufgerufen, die keinen Kontext hat. – Mostafa

+6

Dann sind Einstellungen nicht das, was Sie zum Speichern der Informationen verwenden möchten. Einstellungen sind auf Anwendungen/Aktivitäten beschränkt. Speichern Sie die Informationen stattdessen auf der Festplatte. – Konklone

+0

Danke. Das kann helfen. Ich sollte nachsehen. – Mostafa

-1

Ich verwende den folgenden Hack: http://www.hasemanonmobile.com/2009/10/05/quick-and-very-dirty-android-development-trick/

im Wesentlichen einen Kontextzeiger als eine statische Variable in Ihrer Aktivität Sie bunkern aus. Ich würde diesen hässlichen Hack nur empfehlen, wenn Sie einen engen Termin haben.

Wenn Sie eine Dienstprogrammklasse schreiben, sollten Sie wahrscheinlich (wie viele Android-Dienstprogramme erfordern) verlangen, dass die aufrufende Anwendung Ihnen einen Kontext als Teil Ihres Konstruktors bereitstellt.

+0

Denken Sie das ist ein Link rot dort :) – t0mm13b

-3

Sie einen Kontext schaffen:

Context myContext = createPackageContext("com.example", 0); 
+4

Bitte fügen Sie Kommentare hinzu, wenn Sie diese Antwort downvote. So können wir lernen, warum dies keine gute Lösung ist. – kuester2000

+3

'createPackageContext()' ist eine nicht-statische Methode für 'Context', daher müssen Sie bereits einen' Context' haben, um sie aufzurufen. Sein Problem ist, dass er nicht verlangen möchte, dass Sie ein Kontextobjekt überall herumreichen, wenn Sie nur auf Systemressourcen zugreifen möchten. –

Verwandte Themen