我有一个小部件,当用户点击widget主体时,它应该调用主应用程序的Activity.我的设置适用于单个窗口小部件实例,但是对于同一窗口小部件的第二个实例,PendingIntent会被重用,因此我发送的重要信息将被覆盖为第一个实例.所以我认为我应该将小部件ID作为Intent数据传递,但是一旦我添加了Intent #setData,我会在日志中看到2个单独的Intent被适当地触发但是Activity无法提取它所以基本上Activity不会出现没有任何反应(没有错误或警告以太)
以下是在Manifest中设置活动的方式:
这里是为处理点击而设置的代码
Intent di = new Intent("bostone.android.search.RESULTS");
di.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// if line below is commented out - the Activity will start
di.setData(ContentUris.withAppendedId(Uri.EMPTY,widgetId));
di.putExtra("URL",url);
views.setOnClickPendingIntent(R.id.widgetContent,PendingIntent.getActivity(this,di,0));
主应用程序和小部件在其自己的包和Manifest中打包为2个单独的APK
最佳答案
我认为你需要一个< data>您的< intent-filter>中的标记为了使你发射的意图与你注册的意图过滤器相匹配.
https://developer.android.com/guide/topics/manifest/data-element.html
使用Uri.EMPTY也可能是个问题.我创建了你自己的Uri方案,所以你的setData()调用看起来像:
di.setData(Uri.withAppendedPath(Uri.parse("droidln://widget/id/"),String.valueOf(appWidgetId)));
你的意图过滤器看起来像: