如何存储小部件的数据?

时间:2011-04-29 15:50:31

标签: android android-widget persistence android-preferences

我正在创建一个小部件,我需要为它存储一些数据。我没有Activity小部件,因此我无法使用SharedPreferences。我存储的数据非常小,但是频繁访问,因此使用数据库是不合适的。我曾想过使用简单的文件,但这似乎不是一个好的解决方案。有没有办法存储小部件的简单数据?

2 个答案:

答案 0 :(得分:3)

您不需要Activity来存储偏好设置,只需Context。在扩展AppWidgetProvider的班级中,您应该在所有相关方法中收到上下文,例如onUpdateonDeleted

然后,您可以使用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 DB也是如此,因为它们也只是文件。

答案 1 :(得分:0)

那些常规Widget方法包含上下文是真的,但如果这些上下文改变了怎么办? 例如,一个应用程序调用一个用onReceive监听小部件并使用该上下文保存数据的动作将能够通过其他应用程序操作读取它吗? - 其他背景。

如果覆盖应用程序并获取它会怎么样? - 活动有效,不确定小部件!