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

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

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

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

在这里,我怀疑

  • 在服务中,我们可以使用共享首选项吗?

  • 如果我们将任何数据存储在应用程序的任何活动的共享首选项中,我们是否能够借助于共享首选项来使用这些数据?

Solutions Collecting From Web of "我可以从服务中的共享首选项获取数据吗?"

您可以通过调用PreferenceManager.getDefaultSharedPreferences(Context context)来访问在所有ActivityService类中共享的默认共享首选项实例:

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

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

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

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

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

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

是的Shivkumar,您可以像您在“活动”中使用的那样正常使用您的共享首选项。

相似

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

有两种方法可以创buildSharedPreference实例:

情况1:

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

案例2:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

注意,即使在不同的地方,如果你创build了一个名字相同的情况(情况1)或者相同的情景(情况2),它仍然是一样的,并且可以共享数据。