本文章是对我学习 android 过程中学到的知识进行汇总、整理、与分享。内容来源为 网络流传的视频、文章、android官方文档等。在此感谢那些在我学习过程中提供知识和帮助的无私的人。
如何在 app widget 上添加按钮并监控呢?接着上一篇继续。
使用对象:pendingIntent 和 RemoteViews
1. pendingIntent :待决定的意图 。里面放的是真正的意图( intent ),当某事件触发pengding intent 时,里面真正的意图( intent )才会生效。
PendingIntent 的三个静态方法:
getActivity(Context context, int requestCode, Intent intent, int flags);
getBroadcast(Context context, int requestCode, Intent intent, int flags);
getService(Context context, int requestCode, Intent intent, int flags);
2. RemoteViews :远程View 。不在一个线程中的 view 。
创建步骤:
1. 在上一篇的 app widget 布局文件(res/Layout/ appwidget.xml )中添加一个 button。
<Button android:id="@+id/appwidget_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="测试"/>
2. 给button绑定监听器。
在 MyAppWidgetProvider 里的 onUpdate 方法中绑定。(因为每次添加或更新都会回调该方法)
@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { //传入的参数:第一个参数,context。第二个参数 用来操作app widget的对象。第三个参数,app widget被创建时的id(因为一个app widget可以被创建很多个,所以需要用id来区分)。 for(int i = 0; i < appWidgetIds.length; i++){ Log.d("mybug", ""+appWidgetIds); //创建(跳转到MainActivity) 的intent。 Intent intent = new Intent(context,MainActivity.class); //创建 PendingIntent ,里面存放 刚才创建的 intent 。 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); //得到RemoteViews实例 。第一个参数 包名 ,第二个参数 app widget的布局文件名(通过包名和文件名来找到该 views)。 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget); //为 views 设置监听。 第一个参数,监听按钮的id,第二个参数 PendingIntent。 remoteViews.setOnClickPendingIntent(R.id.appwidget_button, pendingIntent); //用onUpdate()被传入的 AppWidgetManager 对象 来操作app widget。这里调用了它的 updateAppWidget方法。 appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); } Log.d("mybug", "onUpdate() is start"); super.onUpdate(context, appWidgetManager, appWidgetIds); }
至此,带按钮且含有监听事件的 app widget 就创建好了。