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

+0

@Joel: Извините, у меня нет текущего проекта, который демонстрирует это. – CommonsWare

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

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

Смежные вопросы