6

Je cherche désespérément à obtenir ma tête autour de la façon d'implémenter les widgets d'écran d'accueil. En ce moment, j'ai (enfin) pu obtenir un bouton sur mon widget répondre à un bouton de presse en mettant en place un filtre d'intention dans le manifeste.Comment lancer l'activité à partir du widget écran d'accueil Android

Cependant, je ne peux pas pour la vie de moi comprendre comment lancer une activité lorsque le bouton est pressé. En gros, voici le code que j'ai:

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

Ce que je veux vraiment faire, cependant, est de commencer une nouvelle activité, ne pas afficher un message de pain grillé. Je sais que cela a quelque chose à voir avec les intentions en suspens, mais je n'arrive pas à comprendre comment faire fonctionner cela.

Toute aide et code d'échantillon seraient appréciés. Merci beaucoup à ceux qui répondent à cette question!

Répondre

13

Eh bien, votre widget d'application devrait déjà avoir un PendingIntent que vous avez lié au bouton. Au lieu d'un PendingIntent qui déclenche un BroadcastReceiver, il s'agit d'un PendingIntent qui démarre un Activity.

+0

Le lien est cassé, pouvez-vous le réparer? – Joel

+0

@Joel: Désolé, je n'ai pas de projet en cours qui le démontre. – CommonsWare

0

Vous pouvez utiliser ce code pour résoudre votre problème.

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

Espérons que cela aide!