如何保存小部件的配置

时间:2014-04-24 10:10:47

标签: android android-widget android-appwidget

我正忙着关注this android tutorial on widgets

特别是您设置ConfigurationActivty的部分。

以下是他们的步骤:

  1. 首先,从启动活动的Intent中获取App Widget ID
  2. 执行App Widget配置。
  3. 配置完成后,通过调用AppWidgetManager
  4. 获取AppWidgetManager.getInstance()的实例
  5. 通过调用RemoteViews
  6. updateAppWidget(int, RemoteViews)布局更新App小部件
  7. 最后,创建返回Intent,使用Activity结果进行设置,然后完成Activity
  8. 我需要帮助2:我已经使用了SharedPrefs,但我如何实际访问我的XML,它提供了有关窗口小部件的信息,例如更新频率:

    <?xml version="1.0" encoding="utf-8"?>
    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/widget_layout"
        android:minHeight="200dp"
        android:minWidth="144dp"
        android:widgetCategory="home_screen"
        android:configure="widget.AppWidgetConfigureActivity"
        android:updatePeriodMillis="1800000" >
    
    </appwidget-provider>
    

    {编辑:}好的,到目前为止我已经实现了这个:

        private void SaveWidgetConfiguration() {
    
        int deviceTypeId = 0;
        int deviceId = 0;
        String hashedPasscode = "";
        int updateFreq = 30000;
    
        SharedPreferences prefs = AppWidgetConfigureActivity.this.getSharedPreferences("prefs", 0);
        SharedPreferences.Editor edit = prefs.edit();
        edit.putInt("Widget_DeviceTypeId:" + appWidgetId, deviceTypeId);
        edit.putLong("Widget_DeviceId:" + appWidgetId, deviceId);
        edit.putString("Widget_Passcode:" + appWidgetId, hashedPasscode);
        edit.putInt("Widget_UpdateFreq:" + appWidgetId, updateFreq);
        edit.commit();
    }
    

    但现在我在哪里以及如何获得这些偏好?

    我正在使用服务来更新我的小部件。我是否在MyWidgetProvider中获取它们?

    My Current MyWidgetProvider:

    public class MyWidgetProvider extends AppWidgetProvider {
    
    private static final String LOG = "de.vogella.android.widget.example";
    
    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    
        Log.w(LOG, "onUpdate method called");
        // Get all ids
        ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    
        // Get Preferences:
    
        // Build the intent to call the service
        Intent intent = new Intent(context.getApplicationContext(), UpdateWidgetService.class);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
    
        // Update the widgets via the service
        context.startService(intent);
    }
    

2 个答案:

答案 0 :(得分:3)

App Widget配置Activity是一个可选的Activity,当用户添加App Widget并允许他或她在创建时修改App Widget设置时启动。在配置活动中,您可以设置更新频率,TextView中的文本,窗口小部件的背景绘制等等......这意味着您在创建窗口小部件之前设置它并且可见。您可以在SharedPreferences中保存所有设置,如果您需要更新或重新创建窗口小部件(重新启动或配置更改后),您可以使用SharedPreferences方法从onUpdate获取保存的设置AppWidgetProvider或您的服务UpdateWidgetService.java。由于您使用UpdateWidgetService更新小部件,因此您应在此服务中使用SharedPreferences

这是一个例子:

Context context = getApplicationContext();

SharedPreferences prefs = context.getSharedPreferences("prefs", 0);
int deviceTypeId = prefs.getInt("Widget_DeviceTypeId:" + appWidgetId, defValue); // defValue is used if the preference doesn't exist
// get all other preferences/settings and use them to update the widget

如果您需要更多详细信息,请询问。

答案 1 :(得分:0)

您不需要访问appwidget_info.xml,因为它已被所有小部件共享,并且您已在Manifest声明了它的使用情况。它将由WidgetProvider自动选中。 Perform your App Widget configuration.阶段可用于从SharedPrefences中获取某些设置,稍后可用于创建视图。