A solution (or rather a workaround) was found. I am posting this for future reference:
It was simpler than I thought, but it didn't occur to me or my friend with whom I am developing this widget, until he recently came up with this simple solution. It consists in having the different flags selected by the users in the configuration activity appended as strings to the intent action. That way, if you want some instances of your widget to behave by outputting sound and others not, setup different action strings accordingly. (for example, "action_button1_sound" if the button should output sound, and "action_button1_nosound" for the opposite behavior. If you have more than one flag you can set in your configuration activity, as it is in our case, you'll have to manifest all possible combinations in your intent-filters. You don't have to parse the intent action string, though, as that is only needed so the intents do not overwrite each other. Therefore, you can now read the arguments passed through the extras and make the buttons behave accordingly. If someone finds a nicer solution I will be happy to hear about it! thanks! On Oct 5, 10:08 pm, Pablo <pablo.llo...@gmail.com> wrote: > I am developing a simple widget which has a couple of buttons in its > layout. > > Before the widget gets added, the configuration activity is displayed, > where the user can choose if the widget makes any sounds when the > buttons get pressed or not. > > Thus, a user can put two instances of the widget, one where he chose > sound to be activated and another where he chose the opposite. > However, I can not seem to be able to reproduce the expected behavior > (that one reproduces sound and the other doesn't). > > The buttons' behavior varies according to the flags specified to the > PendingIntent: > > - FLAG_UPDATE_CURRENT seems to override the previous intent/setting > - no flags (0x00) seems to ignore any intent/setting after the first > instance of the widget is put. > > What I want to do: I want to be able to configure different instances > of the same widget to behave in a different way, according to what the > user specified in the configuration activity. I am attempting to do > this with the help of the appWidgetId of each instance: > > I have tried the following when assigning an action to the click of > the button: > > int mAppWidgetId=appWidgetIds[i]; > Intent intent1=new Intent(); > > intent1.setAction("com.spartancoders.intenttest.TEST"); > Log.d("TEST ONUPDATE",""+mAppWidgetId); > intent1.putExtra("id", mAppWidgetId); > PendingIntent pi1 = > PendingIntent.getBroadcast(context, > 0,intent1,PendingIntent.FLAG_UPDATE_CURRENT); > > And in the onReceive() method: > > Bundle extras = arg1.getExtras(); > if (arg1!=null){ > Log.d("TEST ONRECEIVE",""+extras.getInt("id")); > } > > This results in the first widget acting properly (The IDs printed in > logcat are as expected) > When adding a second widget, however, the first widget starts > reporting the second widget's appWidgetId in its onReceive(), when it > previously did no such thing. > (because of the FLAG_UPDATE_CURRENT, I guess) > > How can one make different instances behave in a different way? > Is there a way to do this with the help of the appWidgetId? > > I have elaborated a widget application for the purpose of debugging > this problem which tries to be minimal, while reproducing the (un) > desired behavior: > > http://www.2shared.com/file/8243059/b6519584/IntentTesttar.html > > Any help is appreciated, thanks! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---