Can I get data from shared preferences inside a service?

夙愿已清 提交于 2019-11-28 09:35:27

You can access the default shared preferences instance, which is shared across all your Activity and Service classes, by calling PreferenceManager.getDefaultSharedPreferences(Context context):

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

This is great for storing simple primitives (like booleans) or serializable objects. However, if you're capturing a lot of location data, you might consider using a SQLite database instead.


I find the solution.
Inside a service we call the following method to get the shared preferences

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


In the above code myapp is a object of the application class which is derived from Application

You need a context to get access to shared preferences. The best way is to create MyApplication as a descendant of Application class, instantiate there the preferences and use them in the rest of your application as MyApplication.preferences:

public class MyApplication extends Application {
    public static SharedPreferences preferences;

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

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

For example, if you need access to your preferences somewhere else, you may call this to read preferences:

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

Or you may call this to save something to the preferences:

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

(don't forget to call commit() after adding or changing preferences!)

Yes Shivkumar, you can use your share preferences in any kind of services as normal as you are using in your Activity.

same like

SharedPreferences preferences = getSharedPreferences("<PrefName>",
            MODE_PRIVATE);
Nguyen Tan Dat

There are two ways to create instance of SharedPreference:

Case 1:

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

Case 2:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

Notice if you create a preference with the same name (case 1) or same context (case 2) even at different places, it's still the same, and can share data, obviously.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!