Search code examples
androidviewwidgetandroid-widgetandroid-appwidget

How to launch an activity after clicking a widget?


I want to create a simple widget with an icon to launch my app.

I have the widget and its layout working properly, but I can't find the way to make it launcher the app when clicking it.

This is the widget class:

public class LauncherWidget extends AppWidgetProvider {

    private static final String ACTION_CLICK = "ACTION_CLICK";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager) {

        Intent intent = new Intent(context, SplashActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        // Attach the intent to the widget's button.
        final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        remoteViews.setOnClickPendingIntent(R.id.widget, pendingIntent);

    }

}

I have never created a widget so I have no idea what to do here. I have checked round here for more info but all I can find are widgets that update its content when clicking, but I tried to use their code but it isn't working.

Thanks in advance.


Solution

  • This is what worked for me...

    The onUpdate method code should be:

    @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
            for (int i = 0; i < appWidgetIds.length; i++) {
                int appWidgetId = appWidgetIds[i];
    
                try {
                    Intent intent = new Intent("android.intent.action.MAIN");
                    intent.addCategory("android.intent.category.LAUNCHER");
    
                    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    intent.setComponent(new ComponentName(context.getPackageName(),
                            "Activity.class"));
                    PendingIntent pendingIntent = PendingIntent.getActivity(
                            context, 0, intent, 0);
                    RemoteViews views = new RemoteViews(context.getPackageName(),
                            R.layout.widget_layout);
                    views.setOnClickPendingIntent(R.id.widget, pendingIntent);
                    appWidgetManager.updateAppWidget(appWidgetId, views);
                } catch (ActivityNotFoundException e) {
                    Toast.makeText(context.getApplicationContext(),
                            "There was a problem loading the application: ",
                            Toast.LENGTH_SHORT).show();
                }
    
            }
        }