Kann ich Daten von freigegebenen Einstellungen innerhalb eines Dienstes abrufen?
Lesezeit: 4 Minuten
SIVAKUMAR.J
Ich entwickle eine Android-Anwendung. Ich verwende Android 2.2
In meiner Anwendung erfasse ich GPS-Daten und sende sie mit dem Zeitintervall von 1 Stunde an den Dienst. Wenn der Benutzer die Anwendung beendet, funktioniert es auch (es ist erforderlich).
Ich verwende 2 Dienste (benutzerdefiniert), einen zum Erfassen von GPS-Daten und einen zum Senden an den Server.
Hier mein Zweifel
Können wir im Service gemeinsame Präferenzen verwenden?
Wenn wir bei irgendeiner Aktivität der Anwendung Daten in gemeinsamen Einstellungen speichern, können wir diese Daten im Dienst mit Hilfe der gemeinsamen Einstellungen verwenden?
Beste Antwort hier gefunden stackoverflow.com/questions/6446221/…
Dies eignet sich hervorragend zum Speichern einfacher Primitive (wie boolesche Werte) oder serialisierbare Objekte. Wenn Sie jedoch viele Standortdaten erfassen, sollten Sie stattdessen eine SQLite-Datenbank verwenden.
Diese Antwort kombiniert damit: Der Kontext innerhalb des Dienstes wird erst sichtbar, wenn onStart oder onStartCommand in services: stackoverflow.com/questions/7619917/… dies für mich gelöst hat.
– Klasse
15. August 2013 um 20:56 Uhr
Sie können jederzeit das Ergebnis des Dienstes übergeben getApplicationContext() Methode statt.
– Twaddington
16. August 2013 um 5:51 Uhr
@twaddington Also, wenn wir verwenden getSharedPreferences(String, Context) die Präferenzen würden nicht geteilt?
– Sohaib
17. April 2015 um 7:20 Uhr
@twaddington: Ich verwende auch die gemeinsame Einstellung für meine Aktivitäten und Dienste wie mPrefsRead = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE); . Aber manchmal erhalte ich die Standardwerte aus den Einstellungen, wie wenn ich mPrefsWrite.putBoolean(KEY, true) schreibe, aber beim Lesen wie mPrefsRead.getBoolean(KEY_LOGIN_STATUS, false); falsch bekomme. Ich habe auch bestätigt, dass der Wert nirgendwo falsch gesetzt ist. Meine App und Dienste werden als unterschiedliche Prozesse ausgeführt, was dazu führt, dass Standardwerte aus den Einstellungen abgerufen werden, wie in einigen SO-Antworten angegeben. Ist es möglich, dies mit Ihrer Antwort zu lösen?
– Madhan
15. August 2017 um 16:36 Uhr
Dies ist die richtige Antwort. Danke an twaddington und zum Beispiel in MyService Class and Method unten: @Override public void onCreate() { super.onCreate(); Log.d (TAG, “onCreate”); SharedPreferences-Einstellungen = PreferenceManager.getDefaultSharedPreferences(this); String email = preferences.getString(“email_address”, “[email protected]”); mythread = new MyThread(E-Mail); Toast.makeText(this, email, Toast.LENGTH_LONG).show(); }
– Mist
29. August 2018 um 17:36 Uhr
Ich finde die Lösung.
Innerhalb eines Dienstes rufen wir die folgende Methode auf, um die gemeinsamen Einstellungen abzurufen
Im obigen Code meine App ist ein Objekt der Anwendungsklasse, von der abgeleitet wird Anwendung
Sie benötigen einen Kontext, um Zugriff auf gemeinsame Einstellungen zu erhalten. Der beste Weg ist zu erstellen MyApplication als Nachkomme von Application Klasse, instanziiere dort die preferences und verwenden Sie sie im Rest Ihrer Anwendung als MyApplication.preferences:
public class MyApplication extends Application {
public static SharedPreferences preferences;
@Override
public void onCreate() {
super.onCreate();
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
Wenn Sie beispielsweise an anderer Stelle Zugriff auf Ihre Einstellungen benötigen, können Sie dies aufrufen, um Einstellungen zu lesen:
Oder Sie können dies aufrufen, um etwas in den Einstellungen zu speichern:
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
(anrufen nicht vergessen commit() nach dem Hinzufügen oder Ändern von Einstellungen!)
Dies würde technisch funktionieren, aber warum würden Sie nicht einfach die bereitgestellten verwenden PreferenceManager#getDefaultSharedPreferences(Context context); statische Methode? Genau dafür ist es da.
– Twaddington
26. November 2012 um 4:35 Uhr
@twaddington solltest du genauer lesen. Meine Antwort ermöglicht den Zugriff auf Einstellungen, wenn context ist nicht verfügbar.
– Lenik
26. November 2012 um 5:08 Uhr
Sicher, aber er fragt ausdrücklich nach der Verwendung gemeinsamer Einstellungen in einem Activity und ein Servicebeide haben eine Context verfügbar.
– Twaddington
26. November 2012 um 5:17 Uhr
Es sollte keine Rolle spielen, welchen Kontext Sie bereitstellen, getDefaultSharedPreferences sollte immer dasselbe zurückgeben SharedPreference Beispiel.
– Twaddington
26. November 2012 um 6:17 Uhr
und muss MyApplication in irgendwelchen Aktivitäten oder so in einer Variablen erstellt werden?
– Gumuruh
11. Januar 2021 um 19:19 Uhr
Ja, Shivkumar, Sie können Ihre Freigabeeinstellungen in allen Arten von Diensten so normal verwenden, wie Sie es in Ihrer Aktivität verwenden.
Beachten Sie, dass, wenn Sie eine Einstellung mit demselben Namen (Fall 1) oder demselben Kontext (Fall 2) auch an verschiedenen Stellen erstellen, diese immer noch dieselbe ist und offensichtlich Daten gemeinsam nutzen kann.
11096800cookie-checkKann ich Daten von freigegebenen Einstellungen innerhalb eines Dienstes abrufen?yes
Beste Antwort hier gefunden stackoverflow.com/questions/6446221/…
– Ajit Kumar Dubey
11. April 2016 um 9:11 Uhr