从Widget传递配置数据的活动

时间:2016-10-26 16:20:32

标签: android android-intent widget

我正在主屏幕Activity发布Widget。执行此操作时,我希望将配置数据从Widget传递到Activity。所以我在Intent添加了额外的数据,这很好。当我添加多个具有不同配置的Widget时会出现问题。无论我点击哪个Widgets,我总是得到最后添加的Widget“实例”的配置。下面是我测试的一些测试代码,只是将appWidgetId传递给ActivityActivity应显示已点按的appWidgetId的{​​{1}}。

Widget

public class TestWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int i=0; i<appWidgetIds.length; ++i) { updateAppWidget(context, appWidgetManager, appWidgetIds[i]); } } private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); updateViews.setTextViewText(R.id.text_view, "Id "+appWidgetId); Intent intent = new Intent(context, TestActivity.class); intent.putExtra("appWidgetId", appWidgetId); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); updateViews.setOnClickPendingIntent(R.id.text_view, pendingIntent); appWidgetManager.updateAppWidget(appWidgetId, updateViews); } } 只是

Activity

public class TestActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); TextView textView = (TextView)findViewById(R.id.app_text_view); textView.setText("appWidgetId " + getIntent().getIntExtra("appWidgetId", -1)); } } 我使用旗帜Intent,这背后没有科学依据。首先,我将此作为0,但标志似乎改变了行为。如果没有旗帜,我会获得前一个FLAG_UPDATE_CURRENT的{​​{1}},我会看到最后添加的ID(我认为)。

从代码中可以看出这是行不通的。只调用方法Widget几次,而不指定它所引用的ID实例(setOnCkickPendingIntent)。

有没有办法做到这一点,以便应用程序可以从Widget获取配置数据?至少应该看到已经点击的小部件的appWidgetId

感谢您的帮助!

0 个答案:

没有答案