web-dev-qa-db-fra.com

Puis-je obtenir des données des préférences partagées à l'intérieur d'un service?

Je développe une application Android. J'utilise Android 2.2

Dans mon application, je capture des données GPS et les envoie au service avec l'intervalle de temps d'une heure. Si l'utilisateur quitte l'application, il fonctionne également (il est obligatoire).

J'utilise 2 services (définis par l'utilisateur), l'un pour la capture des données GPS et l'autre pour l'envoi au serveur.

Voici mon doute

  • En service, pouvons-nous utiliser des préférences partagées.

  • Si nous stockons des données dans des préférences partagées dans une activité de l'application, serons-nous en mesure d'utiliser ces données en service à l'aide de préférences partagées?

42
SIVAKUMAR.J


Je trouve la solution.
Dans un service, nous appelons la méthode suivante pour obtenir les préférences partagées

myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE);


Dans le code ci-dessus myapp est un objet de la classe d'application qui est dérivé de Application

15
SIVAKUMAR.J

Vous pouvez accéder à l'instance de préférences partagées par défaut, qui est partagée entre toutes vos classes Activity et Service, en appelant PreferenceManager.getDefaultSharedPreferences(Context context) :

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

C'est idéal pour stocker des primitives simples (comme des booléens) ou des objets sérialisables. Cependant, si vous capturez beaucoup de données de localisation, vous pouvez envisager d'utiliser une base de données SQLite à la place.

42
twaddington

Vous avez besoin d'un contexte pour accéder aux préférences partagées. La meilleure façon est de créer MyApplication en tant que descendant de la classe Application, d'y instancier preferences et de les utiliser dans le reste de votre application en tant que MyApplication.preferences:

public class MyApplication extends Application {
    public static SharedPreferences preferences;

    @Override
    public void onCreate() {
        super.onCreate();

        preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);

Par exemple, si vous avez besoin d'accéder à vos préférences ailleurs, vous pouvez appeler cela pour lire les préférences:

String str = MyApplication.preferences.getString( KEY, DEFAULT );

Ou vous pouvez appeler cela pour enregistrer quelque chose dans les préférences:

MyApplication.preferences.edit().putString( KEY, VALUE ).commit();

(n'oubliez pas d'appeler commit() après avoir ajouté ou modifié des préférences!)

8
lenik

Oui Shivkumar, vous pouvez utiliser vos préférences de partage dans tout type de services aussi normalement que vous utilisez dans votre activité.

pareil

SharedPreferences preferences = getSharedPreferences("<PrefName>",
            MODE_PRIVATE);
6
Jignesh Ansodariya

Il existe deux façons de créer une instance de SharedPreference:

Cas 1:

SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);

Cas 2:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Remarquez que si vous créez une préférence avec le même nom (cas 1) ou le même contexte (cas 2) même à des endroits différents, c'est toujours la même chose, et vous pouvez évidemment partager des données.

4
Nguyen Tan Dat