在android程序中加入widget(窗口小部件)并与之交互的关键代码

摘要:

widget(窗口小部件)可以增强应用程序的交互性,

是很多应用中都会用到的功能,本文不求大而全,但是会给出程序与widget交互的关键代码

正文:

其实widget是嵌入(embedded)在桌面(launcher2)应用中的,

它与自己的应用是在两个进程中分别执行的,

所以与widget的交互就涉及到进程间通信,

通常对于widget而言,可以采用google提供的api与广播配合来进行交互

具体做法是在MyWidgt.java(命名任意)中回调方法中开启服务:

public class MyWidget extends AppWidgetProvider {

    @Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context,UpdateWidgetService.class);
context.startService(i);
super.onReceive(context, intent);
} @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds);
} @Override
public void onEnabled(Context context) {
Intent intent = new Intent(context,UpdateWidgetService.class);
context.startService(intent);
super.onEnabled(context);
} @Override
public void onDisabled(Context context) {
Intent intent = new Intent(context,UpdateWidgetService.class);
context.stopService(intent);
super.onDisabled(context);
} }

在UpdateWidgetService.java中调用google的api

并设置intent

private AppWidgetManager awm = AppWidgetManager.getInstance(this);
ComponentName provider = new ComponentName(
UpdateWidgetService.this, MyWidget.class);
RemoteViews views = new RemoteViews(getPackageName(),
R.layout.widget);
views.setTextViewText(R.id.TextView,"XXX"); //这是给按钮添加了点击事件,并由按钮通过broadcast的intent发出
Intent intent = new Intent();
intent.setAction("com.XXX.action");
PendingIntent pendingIntent = PendingIntent.getBroadcast(
getApplicationContext(), 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.btn, pendingIntent); awm.updateAppWidget(provider, views);

如果定时执行这段代码就可以达到定时更新widget的效果了

剩下的工作还有配置清单文件,创建widget_provider.xml文件,创建布局文件等,在此就不累述了.

上一篇:关于java读取和写入properties配置文件的内容


下一篇:【原创】梵高油画用深度卷积神经网络迭代十万次是什么效果? A neural style of convolutional neural networks