6

我拼命想让我的脑袋缠绕如何实现主屏幕小部件。现在,我(最终)能够在我的窗口小部件上获得一个按钮,以响应按钮按下在清单中设置意图过滤器。如何从Android主屏幕小部件发起活动

但是,我不能为我的生活弄清楚如何按下按钮时启动一个活动。基本上,这里是我的代码:

@Override 
public void onReceive(Context context, Intent intent) 
{ 
     super.onReceive(context, intent); 
     if(intent.getAction().equals("com.bic.search.searchWidget.CLICK")) 
     { 
      Toast.makeText(context, "It works!!", Toast.LENGTH_SHORT).show(); 
     } 
} 

但是我真正想要做的是开始一个新的活动,而不是显示吐司消息。我知道这与待决意图有关,但我无法弄清楚如何实现这一目标。

任何帮助和示例代码将不胜感激。非常感谢任何人回答这个问题!

回答

13

那么,你的应用小部件应该已经有一个PendingIntent,你绑定到按钮。而不是PendingIntent触发BroadcastReceiver,它是PendingIntent,启动Activity

+0

链接被破坏,你能解决它吗? – Joel 2013-11-14 15:09:03

+0

@Joel:对不起,我目前还没有一个项目可以证明这一点。 – CommonsWare 2013-11-14 15:13:19

0

您可以使用此代码来解决您的问题。

public class Widget extends AppWidgetProvider { 

     // ... 

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

      for(int i = 0; i < appWidgetIds.length; i++){ 

       RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget); 

       Intent startActivityIntent = new Intent(context, myActivity.class); 
       PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
       widget.setPendingIntentTemplate(R.id.list_view, startActivityPendingIntent); 

       appWidgetManager.updateAppWidget(appWidgetIds[i], widget); 

       // ... 
     } 
    } 

    public class WidgetAdapter implements RemoteViewsService.RemoteViewsFactory { 

     // ... 

     @Override 
     public RemoteViews getViewAt(int position) { 

     RemoteViews widgetRow = new RemoteViews(context.getPackageName(), R.layout.widget_row); 

      Intent fillInIntent = new Intent(); 
      fillInIntent.putExtra(Widget.EXTRA_LIST_VIEW_ROW_NUMBER, position); 
      widgetRow.setOnClickFillInIntent(R.id.list_view_row, fillInIntent); 

      // ... 

      return row; 
     } 
    } 

希望这会有所帮助!

相关问题