如何存储小部件的数据?

问题描述 投票:4回答:2

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

android android-widget persistence android-preferences
2个回答
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也是如此,因为它们也只是文件。


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.