Как запустить активность из виджета домашнего экрана Android - PullRequest
6 голосов
/ 25 апреля 2010

Я отчаянно пытаюсь понять, как реализовать виджеты на главном экране. Прямо сейчас я (наконец-то) смог получить кнопку на своем виджете в ответ на нажатие кнопки, настроив фильтр намерений в манифесте.

Тем не менее, я не могу понять, как запустить действие, когда кнопка нажата. Вот код, который у меня есть:

 @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(); 
      } 
 } 

Что я действительно хочу сделать, так это начать новую деятельность, а не выводить тост-сообщение. Я знаю, что это как-то связано с ожидаемыми намерениями, но я не могу понять, как заставить это работать.

Любая помощь и пример кода будут оценены. Огромное спасибо тому, кто ответит на это!

Ответы [ 2 ]

13 голосов
/ 25 апреля 2010

Хорошо, ваш виджет приложения уже должен иметь PendingIntent, который вы привязали к кнопке. Вместо PendingIntent, который вызывает BroadcastReceiver, пусть это будет PendingIntent, который запускает Activity.

0 голосов
/ 04 апреля 2014

Вы можете использовать этот код для решения вашей проблемы.

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;
        }
    }

Надеюсь, это поможет!

...