我正在开发一个安卓应用程序。我正在使用安卓 2.2
在我的应用程序中,我正在捕获 GPS 数据并以 1 小时的时间间隔将其发送到服务。如果用户退出应用程序,它也可以工作(这是必需的)。
我正在使用 2 项服务(用户定义),一项用于捕获 GPS 数据,另一项用于发送到服务器。
这是我的疑问
在服务中,我们可以使用共享偏好。
如果我们在应用程序的任何活动中将任何数据存储在共享首选项中,我们是否能够在共享首选项的帮助下在服务中使用该数据?
我正在开发一个安卓应用程序。我正在使用安卓 2.2
在我的应用程序中,我正在捕获 GPS 数据并以 1 小时的时间间隔将其发送到服务。如果用户退出应用程序,它也可以工作(这是必需的)。
我正在使用 2 项服务(用户定义),一项用于捕获 GPS 数据,另一项用于发送到服务器。
这是我的疑问
在服务中,我们可以使用共享偏好。
如果我们在应用程序的任何活动中将任何数据存储在共享首选项中,我们是否能够在共享首选项的帮助下在服务中使用该数据?
您可以通过调用以下方式访问默认的共享首选项实例,该实例在您的所有班级Activity
和班级之间共享:Service
PreferenceManager.getDefaultSharedPreferences(Context context)
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
这对于存储简单的原语(如布尔值)或可序列化对象非常有用。但是,如果您要捕获大量位置数据,则可以考虑改用 SQLite 数据库。
我找到了解决方案。
在服务内部,我们调用以下方法来获取共享首选项
myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE);
在上面的代码中myapp是应用程序类的一个对象,它是从Application派生的
您需要一个上下文来访问共享首选项。最好的方法是创建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()
(添加或更改首选项后不要忘记调用!)
是的 Shivkumar,您可以在任何类型的服务中使用您的共享偏好,就像您在活动中使用的一样。
相似
SharedPreferences preferences = getSharedPreferences("<PrefName>",
MODE_PRIVATE);
有两种创建实例的方法SharedPreference
:
情况1:
SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);
案例二:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
请注意,即使您在不同的地方创建具有相同名称(案例 1)或相同上下文(案例 2)的首选项,它仍然是相同的,并且显然可以共享数据。