我正在开发一个Android应用程序。我正在使用android 2.2
在我的应用程序中,我正在捕获GPS数据并以1小时的时间间隔将其发送到服务中。如果用户退出应用程序,它也可以正常工作(这是必需的)。
我正在使用2个服务(用户定义),一个用于捕获GPS数据,另一个用于发送到服务器。
这是我的怀疑
在使用中,我们可以使用共享偏好。
如果我们将任何数据存储在应用程序的任何活动中的共享首选项中,我们是否可以借助共享首选项在服务中使用该数据?
答案 0 :(得分:40)
您可以通过拨打PreferenceManager.getDefaultSharedPreferences(Context context)
来访问所有Activity
和Service
课程共享的默认共享偏好设置实例:
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)的首选项,它仍然是相同的,并且显然可以共享数据。