Как мне сохранить данные для виджета?

#android #android-widget #persistence #android-preferences

#Android #android-виджет #постоянство #android-настройки

Вопрос:

Я создаю виджет, и мне нужно сохранить для него некоторые данные. У меня нет Activity с виджетом, поэтому я не могу использовать SharedPreferences . Данные, которые я храню, очень маленькие, но к ним часто обращаются, поэтому было бы излишним использовать для них базу данных. Я думал об использовании простых файлов, но это не кажется хорошим решением. Есть ли какой-либо способ сохранить простые данные для виджета?

Ответ №1:

Вам не нужен 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, поскольку это тоже просто файлы.

Ответ №2:

Те обычные методы виджета, которые содержат контекст, верны, но что, если эти контексты изменятся? Например, одно приложение, вызывающее действие, которое прослушивает виджет с помощью onReceive и сохраняет данные в этом контексте, сможет прочитать их с помощью другого действия приложения? — другой контекст.

Что, если это переопределит приложение и получит его? — с activity работает, не уверен насчет widget!