小部件setOnClickPendingIntent

时间:2014-02-11 23:10:14

标签: android

所以,我很难弄清楚如何让我的应用程序小部件以我想要的方式工作,或者甚至可能。

小工具有ImageView,我为其分配了setOnClickPendingIntent。但是,我想要完成的只是实例化一个类,并在用户点击app小部件中的ImageView时调用该类中的方法。但是,如何让PendingIntent做其他事情,而不仅仅是启动活动?不确定这是否有意义,但我非常感谢你的帮助。

           // 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);

2 个答案:

答案 0 :(得分:15)

您可以使用PendingIntent.getBroadcast课程中收到的AppWidgetProvider

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);

然后在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();
    }
}

有关要使用的标志的详细信息,请查看the docs about PendingIntent。我希望我能正确理解你的问题,我的回答对你有意义:)如果没有,请不要犹豫让我知道......

答案 1 :(得分:1)

我想在按钮点击时更改小部件背景,我使用了@ 2Dee的答案。直到我在更改后更新了Widget之后,它才对我有效:

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget2x2);
remoteViews.setInt(R.id.widget_layout2x2, "setBackgroundResource", R.drawable.border_radius);
//Don't forget to update the widget
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
ComponentName me = new ComponentName(context, Widget2x2.class);
mgr.updateAppWidget(me, remoteViews);