6

Sto cercando disperatamente di capire come implementare i widget della schermata iniziale. Al momento, sono finalmente riuscito a ottenere un pulsante sul mio widget per rispondere alla pressione di un pulsante che ha impostato un filtro intent nel manifest.Come avviare l'attività dal widget della schermata iniziale di Android

Tuttavia, non posso per la vita di me capire come avviare un'attività quando si preme il pulsante. In sostanza, ecco il codice che ho:

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

Quello che voglio veramente fare, però, è avviare una nuova attività, non visualizzare un messaggio brindisi. So che ha qualcosa a che fare con gli intent in sospeso, ma non riesco a capire come farlo funzionare.

Qualsiasi aiuto e codice di esempio sarebbe apprezzato. Grazie mille a chiunque risponda a questo!

risposta

13

Bene, il widget dell'app dovrebbe già avere uno PendingIntent legato al pulsante. Invece di un PendingIntent che attiva uno BroadcastReceiver, è necessario che sia PendingIntent che avvia uno Activity.

+0

Il collegamento è interrotto, è possibile risolvere il problema? – Joel

+0

@Joel: Siamo spiacenti, non ho un progetto corrente che dimostri questo. – CommonsWare

0

È possibile utilizzare questo codice per risolvere il 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; 
     } 
    } 

Spero che questo aiuti!

Problemi correlati