Can I get data from shared preferences inside a service?

前端 未结 5 1626
不思量自难忘°
不思量自难忘° 2020-12-10 00:46

I\'m developing an android application. I\'m using android 2.2

In my application I am capturing GPS data and sending it to service with the 1 hour time interval. If

相关标签:
5条回答
  • 2020-12-10 00:48

    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);
    
    0 讨论(0)
  • 2020-12-10 00:58

    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.

    0 讨论(0)
  • 2020-12-10 01:05

    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.

    0 讨论(0)
  • 2020-12-10 01:07


    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

    0 讨论(0)
  • 2020-12-10 01:11

    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!)

    0 讨论(0)
提交回复
热议问题