我可以从服务中的共享首选项中获取数据吗?

时间:2012-11-26 04:13:29

标签: android sharedpreferences android-service android-2.2-froyo

我正在开发一个Android应用程序。我正在使用android 2.2

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

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

这是我的怀疑

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

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

5 个答案:

答案 0 :(得分:40)

您可以通过拨打PreferenceManager.getDefaultSharedPreferences(Context context)来访问所有ActivityService课程共享的默认共享偏好设置实例:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

这非常适合存储简单的基元(如布尔值)或可序列化的对象。但是,如果要捕获大量位置数据,则可以考虑使用SQLite数据库。

答案 1 :(得分:14)


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

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


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

答案 2 :(得分:8)

您需要一个上下文才能访问共享首选项。最好的方法是创建MyApplication作为Application类的后代,在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()!)

答案 3 :(得分:6)

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

同样

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

答案 4 :(得分:3)

有两种方法可以创建SharedPreference的实例:

案例1:

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

案例2:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

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