2011-09-02 34 views
2

在我的微件提供者,我有以下代码:传递控件ID的活动

for (int widget_id : appWidgetIds) { 
    Log.d(TAG, "Widget Id: " + widget_id); 
    RemoteViews remoteViews; 

    Widget widget; 

    while (true) { 
    try { 
     widget = Widget.load(context, Widget.class, widget_id); 
     break; 
    } 
    catch (Exception ex) { 
     Log.e(TAG, "Exception!", ex); 
    } 
    } 

    // Widget is assigned to user 
    if (widget != null) { 
    remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_with_user); 
    remoteViews.setCharSequence(R.id.user_text, "setText", widget.user.name); 
    remoteViews.setUri(R.id.avatar, "setImageURI", Uri.parse(widget.user.avatar)); 
    } 
    else { 
    remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
    Intent configIntent = new Intent(context, ConfigureWidget.class); 
    configIntent.setAction(ACTION_WIDGET_CONFIGURE); 
    configIntent.putExtra("widget_id", widget_id); 

    PendingIntent configPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE_ONE, configIntent, 0); 
    remoteViews.setOnClickPendingIntent(R.id.configure_text, configPendingIntent); 
    } 

    appWidgetManager.updateAppWidget(widget_id, remoteViews); 
} 

在其他部分,我推出了配置活动,并试图将小部件ID传递给它。但是,该包始终为空:

Bundle extras = getIntent().getExtras(); 

if (extras != null) { 
    int widget_id = extras.getInt("widget_id"); 
} 

如何才能将widget ID发送到启动的活动?

回答

5

问题在于android使用PendingIntents进行缓存。解决方案是添加FLAG_UPDATE_CURRENT标志,使其更新缓存的PendingIntent。

PendingIntent configPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE_ONE, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Source

1

尝试下面的代码,而不是:

if (extras != null) { 
    int widget_id = getIntent().getIntExtra("widget_id", defaultValue); 
} 
1

公共捆绑getExtras()
检索地图上从意图扩展的数据的。

Source

也是一样的 Intent.putExtra(Bundle)。这些是扩展属性。
尝试使用getIntent().getIntExtra(String key, int defaultValue)代替。

+0

'公众诠释getIntExtra(字符串名称,整数默认值)' 检索来自意图扩展数据。 'getIntExtra'同样适用 – kabuko

+0

你是对的,强调扩展在这里是不正确的。如果我没有记错,他们仍然是分离的值。 – 2011-09-02 22:57:11

1

您是否确定在清单中正确注册了意图过滤器?出于某种原因,如果没有明确的操作,extras将无法正确传递,如果您尚未设置intent过滤器,则可能无法正常工作。