如何为小部件存储数据?

5

我正在创建一个小部件,需要存储一些数据。由于没有与小部件相关联的Activity,所以无法使用SharedPreferences。我要存储的数据非常少,但是访问频繁,因此使用数据库会过度。我考虑过使用简单文件,但那似乎不是一个好的解决方案。有没有办法为小部件存储简单的数据呢?

2个回答

4

您无需使用 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数据库,因为它们也只是文件而已。

0

这些常规的Widget方法包含上下文是真实的,但是如果这些上下文发生变化怎么办呢? 例如,一个应用程序调用一个动作,该动作侦听具有onReceive的小部件并使用该上下文保存数据,将能够通过其他应用程序动作读取它吗?-其他上下文。

如果覆盖应用程序并获取它会怎样呢?-使用活动可以,但不确定小部件!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接