在Xamarin Android中区分点击事件中的应用程序小部件实例
我在使用Xamarin Android将点击事件绑定到应用程序小部件时遇到问题。点击是有效的,并且正在启动活动,但是传递来区分小部件的信息是无效的。似乎正在为小部件的所有实例注册相同的意图 下面是从服务执行单击绑定的代码的简化示例。完整的代码还更新小部件上的文本。这部分工作正常,并且在小部件的每个实例上都不同,所以我相信整体更新模式是正确的。这就给我留下了intent/pending intent绑定的问题。我下面使用的模式有什么问题吗在Xamarin Android中区分点击事件中的应用程序小部件实例,android,xamarin,android-pendingintent,android-appwidget,Android,Xamarin,Android Pendingintent,Android Appwidget,我在使用Xamarin Android将点击事件绑定到应用程序小部件时遇到问题。点击是有效的,并且正在启动活动,但是传递来区分小部件的信息是无效的。似乎正在为小部件的所有实例注册相同的意图 下面是从服务执行单击绑定的代码的简化示例。完整的代码还更新小部件上的文本。这部分工作正常,并且在小部件的每个实例上都不同,所以我相信整体更新模式是正确的。这就给我留下了intent/pending intent绑定的问题。我下面使用的模式有什么问题吗 public override StartCommandR
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
var manager = AppWidgetManager.GetInstance(this);
var ids = intent.GetIntArrayExtra(AppWidgetManager.ExtraAppwidgetIds);
foreach (var id in ids)
{
var widgetView = new RemoteViews(PackageName, Resource.Layout.SingleRateWidget);
var activityIntent = new Intent(this, typeof(ExchangesActivity));
activityIntent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.NewTask);
activityIntent.PutExtra("WidgetId", id);
var pendingIntent = PendingIntent.GetActivity(this, 0, activityIntent, PendingIntentFlags.UpdateCurrent);
widgetView.SetOnClickPendingIntent(Resource.Id.widgetBackground, pendingIntent);
manager.UpdateAppWidget(id, widgetView);
}
return StartCommandResult.Sticky;
}
谢谢。经过更多搜索,我在Java Android开发的一个问题中找到了修复方法: 简短回答,将挂起意图的创建更改为:
var pendingIntent = PendingIntent.GetActivity(this, id, activityIntent, PendingIntentFlags.UpdateCurrent);
长话短说,Android没有看到挂起的意图有什么不同,所以每次都重复使用相同的挂起的意图。对PutExtra有一个意图并不足以区分动作。通过将requestCode设置为widget ID,可以使挂起的意图变得唯一。另一个选项是使用唯一的URI(使用应用程序小部件id)在操作意图上执行SetData,但只在挂起的意图上使用requestCode更容易