Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Widget setOnClickPendingIntent

Tags:

android

So, I am having a hard time figuring out how to make my app widget work the way I want it to, or if its even possible.

The Widget has a ImageView and I assign a setOnClickPendingIntent to it. However, what I want to accomplish is basically just to instantiate a class and call a method in that class when the user taps the ImageView in the app widget. However, how can I make the PendingIntent do something else than just firing up an activity instead? Not sure if this made any sense, but I really appreciate the help.

           // Create an Intent to launch MainActivity
            Intent intent = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
                    /**
                    /* However, I want to simply do something like this
                    /* MyClass mc = new MyClass(context);
                    /* mc.toggleEnable();
                    */

            // Get the layout for the App Widget and attach an on-click listener
            // to the button
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            views.setOnClickPendingIntent(R.id.imageViewWidgetToggle, pendingIntent);
like image 530
ardevd Avatar asked Feb 11 '14 23:02

ardevd


1 Answers

You can use PendingIntent.getBroadcast which will be received in your AppWidgetProvider class :

Intent intent = new Intent(context, YourAppWidgetProvider.class);
intent.setAction("use_custom_class");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.imageViewWidgetToggle, pendingIntent);

and then in the AppWidgetProvider :

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);

    String action = intent.getAction();
    String actionName = "use_custom_class";

    if (actionName.equals(action)) {
        MyClass mc = new MyClass(context);
        mc.toggleEnable();
    }
}

Have a look at the docs about PendingIntent for details on the flags to use. I hope I understood your question correctly and that my answer made sense to you :) If not, don't hesitate to let me know...

like image 158
2Dee Avatar answered Sep 19 '22 14:09

2Dee