使用SharedPreferences配置Android小部件

7

我正在开发一个桌面小部件,希望用户在启动时定义一个用户名。但是我遇到了在小部件中存储和访问该值的问题。目前我所做的是创建一个配置活动,当小部件被创建时启动它。因此,我在清单文件中定义如下(我也在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的文本...只定义了setter setTextViewText(String text)

我该如何检索用户名?

1个回答

13

您需要从上下文中获取SharedPreferences实例,该上下文在小部件提供程序的onUpdate()方法中提供。例如:

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

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