Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android小部件通过intent向onRecive发送数据_Android_Android Intent_Android Widget - Fatal编程技术网

Android小部件通过intent向onRecive发送数据

Android小部件通过intent向onRecive发送数据,android,android-intent,android-widget,Android,Android Intent,Android Widget,我正在创建一个android小部件,通过单击它,小部件的每个实例都会转到不同的url 将url从“onUpdate”发送到“onReceive”方法时遇到问题 更新代码: List<String> urls = Arrays.asList("google.com", "yahoo.com", "bing.com", "msn.com"); @Override public void onUpdate(Context context, AppWidgetManager appWid

我正在创建一个android小部件,通过单击它,小部件的每个实例都会转到不同的url

将url从“onUpdate”发送到“onReceive”方法时遇到问题

更新代码:

 List<String> urls = Arrays.asList("google.com", "yahoo.com", "bing.com", "msn.com");

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    int cnt = 0;

    // Get all ids
    ComponentName thisWidget = new ComponentName(context,MyWidgetProvider.class);
    int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    for (int widgetId : allWidgetIds) {
        // create some random data

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
        Log.w("WidgetExample", urls.get(cnt));
        // Set the text
        remoteViews.setTextViewText(R.id.urlData, urls.get(cnt));

        // Register an onClickListener
        Intent intent = new Intent(context, MyWidgetProvider.class);

        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
        intent.putExtra("url",urls.get(cnt));

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.open, pendingIntent);
        appWidgetManager.updateAppWidget(widgetId, remoteViews);

        cnt++;
    }
}
问题是我得到了相同的url(列表中的最后一个--“msn.com”)

谢谢你的分配


Avi

我认为这个追加是因为每次您都会覆盖PendingEvent中的意图存储,因为请求代码不会更改

PendingIntent pendingIntent = PendingIntent.getBroadcast(context,**0**, intent, PendingIntent.FLAG_UPDATE_CURRENT);
如果要设置更多PendingEvent,则必须更改requestCode(在您的情况下为0)

试一试


通过这种方式,所有PendingEvent都是不同的…

您使用的是
PendingEvent.FLAG_UPDATE_CURRENT
,如文档所述,“[…]如果所述PendingEvent已经存在,则保留它,但用新目的中的内容替换它的额外数据[…]”


因此,由于您试图创建同一类的多个实例(
pendingent
),该标志导致了不必要的行为。它正在更新以前实例化的对象(第一次调用
pendingent.getBroadcast(…)
方法)并更改该对象的字段并返回它。这样,您的所有通话都以最后一个额外的(您提供的最后一个URL)结束。

谢谢您的详细解释
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,**0**, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, cnt, intent, PendingIntent.FLAG_UPDATE_CURRENT);