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?
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
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.
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!)
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);
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.