我正在开发一款Android应用程序,使用的是Android 2.2版本。
在我的应用程序中,我正在捕获GPS数据并将其发送到服务中,时间间隔为1小时。如果用户退出应用程序,它也能正常工作(这是必需的)。
我正在使用2个服务(用户自定义),一个用于捕获GPS数据,另一个用于将数据发送到服务器。
下面是我的疑问:
在服务中,我们可以使用共享首选项吗?
如果我们在应用程序的任何活动中存储任何数据在共享首选项中,那么我们能否通过共享首选项在服务中使用该数据?
我正在开发一款Android应用程序,使用的是Android 2.2版本。
在我的应用程序中,我正在捕获GPS数据并将其发送到服务中,时间间隔为1小时。如果用户退出应用程序,它也能正常工作(这是必需的)。
我正在使用2个服务(用户自定义),一个用于捕获GPS数据,另一个用于将数据发送到服务器。
下面是我的疑问:
在服务中,我们可以使用共享首选项吗?
如果我们在应用程序的任何活动中存储任何数据在共享首选项中,那么我们能否通过共享首选项在服务中使用该数据?
PreferenceManager.getDefaultSharedPreferences(Context context)
来访问默认的共享首选项实例,该实例在所有Activity
和Service
类之间共享。SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
这对于存储简单的原始数据类型(例如布尔值)或可序列化对象非常好。然而,如果您要捕获大量位置数据,则可能考虑改用SQLite数据库。
getApplicationContext()
方法的结果。 - twaddingtongetSharedPreferences(String, Context)
,那么偏好设置就不会被共享了吗? - Sohaib
我找到了解决方案。
在一个服务内,我们调用以下方法来获取共享偏好设置。
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()
!)PreferenceManager#getDefaultSharedPreferences(Context context);
静态方法呢?那正是它的用途。 - twaddingtoncontext
不可用时访问首选项。 - lenikActivity
和Service
中使用共享首选项,这两者都有可用的Context
。 - twaddingtongetDefaultSharedPreferences
都应该始终返回相同的 SharedPreference
实例。 - twaddington是的,Shivkumar,你可以像在Activity中一样正常地在任何类型的服务中使用共享偏好设置。
同样的
SharedPreferences preferences = getSharedPreferences("<PrefName>",
MODE_PRIVATE);
有两种方式创建SharedPreference
实例:
第一种情况:
SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);
案例2:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
请注意,如果在不同的位置创建相同名称(情况1)或相同上下文(情况2)的首选项,则它们仍然是相同的,并且可以共享数据,这是显而易见的。
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences(Constants.SHARED_PREF, Context.MODE_PRIVATE);