I'm trying to use one widget definition and one widget layout in my 
application, but I would like to allow the user to install  the very same 
widget many times on the screen.

 

Then, if the user clicks the corresponding widget layout on the screen, I 
would like to launch an activity and to show which widget instance (widget 
ID) has launched the activity.

 

For example, if the user installed the same widget twice, both widget 
instances will have the same layout (on different places on the screen), and 
two different IDs (like ID #56 and ID# 57).  Then, if the user clicks the 
first widget layout on the screen, he should see a simple activity screen 
"Called from widget id #56". If the user clicks the second widget layout, he 
should see "Called from widget # 57"

 

I am setting the onClickListner, using remoteViews.setOnClickPendingIntent 
and I pass the widgetID as an extra in the Intent.

 

It works fine, if the user install the widget only once. However, if he 
installs the same widget more than once, it doesn’t send  the proper Pending 
Intent.

 

 

Seems like every time when a new PendingIntent is scheduled with 
remoteViews.setOnClickPendingIntent for the same widget class  (even from 
different widget instances), it will override the previous scheduled 
PendingIntent, or it  will be ignored (depending of the pending intent 
flag).

 

So when the user clicks the different widget layouts on the screen, the OS 
will launch only the very first or the very last Pending Intent for all of 
them, and the activity will receive only the very first ,or the very last 
widget ID, no matter which layout is pressed. 

 

In our example, the user will see always "called from widget # 56" , no 
matter which layout is pressed.

 

 

For different widget instances, I would like to schedule different 
PendingIntents with remoteViews.setOnClickPendingIntent, but I am not sure 
if this is possible.

 

 

I tried unsuccessfully all available flags :   PendingIntent.FLAG_NO_CREATE,  
PendingIntent.FLAG_ONE_SHOT, PendingIntent.FLAG_CANCEL_CURRENT, 
PendingIntent.FLAG_UPDATE_CURRENT, Intent.FILL_IN_ACTION, 
Intent.FILL_IN_CATEGORIES ,  Intent.FILL_IN_DATA,  Intent.FILL_IN_COMPONENT  
, Intent.FILL_IN_PACKAGE , Intent.FILL_IN_SOURCE_BOUNDS

 

Here is a short snippet in the body of the widget (AppWidgetProvider):

 

(Please note, that I am displaying the widgetID on the widget layout at the 
same time when I set remoteViews.setOnClickPendingIntent with the same 
widget id. The widgetID is displayed correctly, the problem is coming only 
when I try to consume the onClick event - the new scheduled PendingIntent is 
either ignored, or it overrides the previous PendingIntent)

 

...

  

 

 

 public void onUpdate( Context context, AppWidgetManager appWidgetManager,

                                                               int[] 
appWidgetIds) {

 

                widgetId = appWidgetIds[0];

                

 

                prepareOnClickListener(context);

 

                appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

 

    }

 

 

    

    private void prepareOnClickListener(Context context){

 

                if (remoteViews==null) {

                                remoteViews = new 
RemoteViews(context.getPackageName(), widgetLayout); 

                }

 

                Intent startIntent = new Intent(context, 
TestActivity.class);

                startIntent.setAction(START_ACTIVITY);               

                startIntent.putExtra(WIDGET_ID, widgetId);

                startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );

 

                PendingIntent pendingIntent = 
PendingIntent.getActivity(context, 0, startIntent, Intent.FILL_IN_DATA); 

                // I tried different flags here, with no success

                

                remoteViews.setOnClickPendingIntent(R.id.intent_layout, 
pendingIntent);

                remoteViews.setTextViewText(R.id.widget_id,"This widget ID 
is "+id);

                                

    }

    

    

 

    

 

    

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to