摘要:
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文件,创建布局文件等,在此就不累述了.
本文详细介绍了如何在Android中使用Widget增强应用交互性。Widget作为桌面应用的一部分,与主应用在不同进程中运行,通过进程间通信实现交互。文章提供了关键代码示例,包括在Widget中启动服务、使用Google API更新Widget内容及响应用户操作。
210

被折叠的 条评论
为什么被折叠?



