2010-04-24 146 views
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; 
     } 
    } 

希望這會有所幫助!

相關問題