50

我正在开发一个安卓应用程序。我正在使用安卓 2.2

在我的应用程序中,我正在捕获 GPS 数据并以 1 小时的时间间隔将其发送到服务。如果用户退出应用程序,它也可以工作(这是必需的)。

我正在使用 2 项服务(用户定义),一项用于捕获 GPS 数据,另一项用于发送到服务器。

这是我的疑问

  • 在服务中,我们可以使用共享偏好。

  • 如果我们在应用程序的任何活动中将任何数据存储在共享首选项中,我们是否能够在共享首选项的帮助下在服务中使用该数据?

4

5 回答 5

47

您可以通过调用以下方式访问默认的共享首选项实例,该实例在您的所有班级Activity和班级之间共享:ServicePreferenceManager.getDefaultSharedPreferences(Context context)

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

这对于存储简单的原语(如布尔值)或可序列化对象非常有用。但是,如果您要捕获大量位置数据,则可以考虑改用 SQLite 数据库。

于 2012-11-26T04:31:23.603 回答
17


我找到了解决方案。
在服务内部,我们调用以下方法来获取共享首选项

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


在上面的代码中myapp是应用程序类的一个对象,它是从Application派生的

于 2012-11-28T11:07:54.467 回答
8

您需要一个上下文来访问共享首选项。最好的方法是创建MyApplicationApplication类的后代,在那里实例化 preferences并在应用程序的其余部分中使用它们MyApplication.preferences

public class MyApplication extends Application {
    public static SharedPreferences preferences;

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

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

例如,如果您需要在其他地方访问您的首选项,您可以调用它来读取首选项:

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

或者您可以调用它来将某些内容保存到首选项中:

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

commit()(添加或更改首选项后不要忘记调用!)

于 2012-11-26T04:22:26.810 回答
8

是的 Shivkumar,您可以在任何类型的服务中使用您的共享偏好,就像您在活动中使用的一样。

相似

SharedPreferences preferences = getSharedPreferences("<PrefName>",
            MODE_PRIVATE);
于 2012-11-26T04:25:58.573 回答
5

有两种创建实例的方法SharedPreference

情况1:

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

案例二:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

请注意,即使您在不同的地方创建具有相同名称(案例 1)或相同上下文(案例 2)的首选项,它仍然是相同的,并且显然可以共享数据。

于 2017-05-08T10:06:05.750 回答