Конфигурация виджета Android с SharedPreferences - PullRequest
6 голосов
/ 03 марта 2011

Я хочу, чтобы пользователь определял имя пользователя при запуске виджета рабочего стола, над которым я сейчас работаю.Но у меня проблемы с хранением и доступом к этому значению в моем виджете.На данный момент я делаю деятельность по настройке, которая запускается при создании виджета.Поэтому я определил его в файле манифеста следующим образом (я также определил его в widgetprovider.xml):

    <activity android:name=".ExampleAppWidgetConfigure">
       <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
       </intent-filter>
    </activity>

Затем действие конфигурации позволяет пользователю ввести имя пользователя, которое будет сохранено в SharedPreferences виджета:

    SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME, MODE_WORLD_READABLE).edit();
    prefs.putString("username", text);
    prefs.commit();

Мой вопрос: как мне получить доступ к этому значению?В моем классе виджетов я хочу иметь переменную экземпляра, такую ​​как:

final String userName = ...; //load the username here.

Но как мне получить имя пользователя в моем виджете?Проблема в том, что виджет является подклассом AppWidgetProvider, из которого я не могу получить доступ к SharedPreferences (потому что AppWidgetProvider не является подклассом Context).Я думал о сохранении имени пользователя в файле strings.xml, что также представляется невозможным.Правильно ли использовать SharedPreferences?Я также думал об установке имени пользователя в TextView моего виджета, который позже должен отображать имя пользователя.Но мне нужно имя пользователя в моем классе для некоторых запросов к серверу, и кажется, что нет способа получить текст TextView в виджете ... определен только сеттер setTextViewText(String text).

Как я могу получить имя пользователя?

1 Ответ

10 голосов
/ 03 апреля 2011

Вам необходимо получить экземпляр SharedPreferences из контекста, который предоставляется в методе onUpdate () в поставщике виджетов.Как то так:

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,0);
}
...