如何向PreferenceActivity发送多个Intent?

时间:2013-07-08 12:35:30

标签: android android-widget sharedpreferences

我遇到问题PreferenceActivity用于设置app小部件的首选项。问题是,当我想通过PreferenceActivity传递Intent任何信息时,我才能阅读它们。在Intent中发送的信息不同之后,之前发送的信息仍然保存,我看不到新信息。唯一要做的就是从系统中删除完整的应用程序并再次安装。但是,一切都会看起来一样(第一个信息将保留)。另一件重要的事情是,我没有将它保存在任何地方,只是在标签文本和LogCat中显示。

这些代码片段负责:

小工具活动

            // Actions required to open settings activity
            Intent intentSettings = new Intent(context, PrefActivity.class);
            intentSettings.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,
                    appWidgetIds);
            intentSettings.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, (allWidgetIds.length+number));
            PendingIntent pendingIntentSettings = PendingIntent.getActivity(
                    context, 0, intentSettings, 0);
            remoteViews.setOnClickPendingIntent(R.id.imb_ustawienia,
                    pendingIntentSettings);

偏好活动

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Log.d("Info","onCreate");

        addPreferencesFromResource(R.xml.pref);

        Bundle intentIn = getIntent().getExtras();
        Log.d("SIZE", "" + intentIn.size());
        if (intentIn == null) {
            Log.d("Tag","Intent is empty");
        }
        else
        {
            widgetId = intentIn.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
            allWidgetIds = intentIn.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
            Log.d("Pref","id: " + widgetId + " ids: " + allWidgetIds.length);
        }

        final CheckBoxPreference checkboxPref1 = (CheckBoxPreference) getPreferenceManager().findPreference("checkboxPref1");

//...

final Preference opt1 = (Preference) findPreference("settings1");
        opt1.setSummary("Widget's id: " + widgetId);

        opt1.setOnPreferenceClickListener(new OnPreferenceClickListener() {
//...
}

@Override
    protected void onStop() {
        super.onStop();
        Intent infoIntent =  new Intent(DataAppWidgetProvider.FORCE_WIDGET_UPDATE);
        infoIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds);
        this.sendBroadcast(infoIntent);
        finish();

    }

你知道吗,有什么问题?看起来某些东西在没有我意愿的情况下保存在某个地方,这就阻止了一切。

1 个答案:

答案 0 :(得分:0)

问题似乎是在widget活动中使用pendingintent。待定意图具有以下特征:如果您使用相同的意图属性(如请求代码,意图等)发送后续意图,那么即使您要添加新的附加内容,所有后续意图实际上也将返回相同的第一意图。这就是为什么你必须看到单独第一次发送的数据达到你的偏好活动,并且后续的具有不同值的意图没有效果。因此,如果您希望使用相同的intent atributes将更新的额外值发送到首选项活动,那么您必须使用FLAG_CANCEL_CURRENT or FLAG_UPDATE_CURRENT之类的标记来指示存在更改。请阅读official document on pending intents以了解这一点。