使用SharedPreferences的Android小部件配置

时间:2011-03-03 17:22:46

标签: android configuration widget sharedpreferences

我希望让用户在启动主屏幕小部件时定义用户名。但我在我的小部件中存储和访问此值时遇到了麻烦。我现在所做的是创建一个配置活动,它在创建窗口小部件时启动。因此我在清单文件中将其定义如下(我也在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();

我的问题是如何获取此值?在我的widget类中,我想要一个像:

这样的实例变量
final String userName = ...; //load the username here.

但是如何在我的小部件中检索用户名?问题是widget是AppWidgetProvider的子类,我无法访问SharedPreferences(因为AppWidgetProvider不是Context的子类)。我想将用户名存储在strings.xml文件中,这似乎也不可能。是否正确使用SharedPreferences?我还想过将用户名设置为我的窗口小部件的TextView,稍后会显示用户名。但我需要我班级中的用户名来获取一些服务器请求,似乎无法在小部件中获取TextView的文本...只定义了setter setTextViewText(String text)

如何检索用户名?

1 个答案:

答案 0 :(得分:10)

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

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