6

Estoy tratando desesperadamente de entender cómo implementar los widgets de la pantalla de inicio. En este momento, yo (finalmente) pude obtener un botón en mi widget responder a un botón presionar configurar un filtro de intención en el manifiesto.Cómo iniciar la actividad desde el widget de la pantalla de inicio de android

Sin embargo, no puedo entender cómo iniciar una actividad cuando se presiona el botón. Básicamente, aquí está el código que tengo:

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

Lo que realmente quiero hacer, sin embargo, es iniciar una nueva actividad, no mostrará un mensaje de aviso emergente. Sé que tiene algo que ver con intenciones pendientes, pero no puedo entender cómo hacerlo funcionar.

Cualquier ayuda y código de muestra sería apreciado. ¡Muchas gracias a quien responda esto!

Respuesta

13

Bueno, su widget de aplicación ya debería tener un PendingIntent que haya vinculado al botón. En lugar de un PendingIntent que desencadena un BroadcastReceiver, debe ser un PendingIntent que inicia un Activity.

+0

El enlace está roto, ¿puedes arreglarlo? – Joel

+0

@Joel: Lo siento, no tengo un proyecto actual que demuestre esto. – CommonsWare

0

Puede usar este código para resolver su problema.

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

Hope this helps!

Cuestiones relacionadas