所以,我很难弄清楚如何让我的应用程序小部件以我想要的方式工作,或者甚至可能。
小工具有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);
答案 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);