我正在创建一个小部件,需要存储一些数据。由于没有与小部件相关联的Activity
,所以无法使用SharedPreferences
。我要存储的数据非常少,但是访问频繁,因此使用数据库会过度。我考虑过使用简单文件,但那似乎不是一个好的解决方案。有没有办法为小部件存储简单的数据呢?
我正在创建一个小部件,需要存储一些数据。由于没有与小部件相关联的Activity
,所以无法使用SharedPreferences
。我要存储的数据非常少,但是访问频繁,因此使用数据库会过度。我考虑过使用简单文件,但那似乎不是一个好的解决方案。有没有办法为小部件存储简单的数据呢?
您无需使用 Activity
存储偏好设置,只需使用一个Context
。在扩展 AppWidgetProvider
的类中,您应该在所有相关方法(如 onUpdate
和 onDeleted
)中接收上下文。
然后,您可以使用 PreferenceManager
获取首选项对象并将所需内容存储在其中,例如:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String value = prefs.getString("key-string", null);
if(value != null)
{
// do stuff
}
}
SharedPreferences
对象最终会使用简单的文件,只是由Android为你管理。如果你经常访问它,仍然需要注意性能。同样也适用于SQLite数据库,因为它们也只是文件而已。这些常规的Widget方法包含上下文是真实的,但是如果这些上下文发生变化怎么办呢? 例如,一个应用程序调用一个动作,该动作侦听具有onReceive的小部件并使用该上下文保存数据,将能够通过其他应用程序动作读取它吗?-其他上下文。
如果覆盖应用程序并获取它会怎样呢?-使用活动可以,但不确定小部件!