AndroidWidget实践 --- EverydayTips开发(2)

本文详细介绍了如何在Android Widget中注册点击事件和接收广播事件,包括创建隐式Intent、添加远程视图设置以及更新Widget内容的方法。通过实现click事件和自定义事件处理,开发者可以增强Widget的交互性。

继续昨天的话题

昨天实现的只是个死的widget widget除了显示信息的作用外还要和用户交互,这就是我们要做的事情:

如图(录制的不好啊) 美工什么的再说吧 呵呵



有点意思了吧?其实很简单


首先是在Widget里添加click事件:

package com.su.tipeveryday; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.provider.ContactsContract.CommonDataKinds.Note; import android.util.Log; import android.widget.RemoteViews; import android.widget.TextView; import android.widget.Toast; public class TipEveryDayWidget extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub super.onDeleted(context, appWidgetIds); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {// widget更新执行的方法 // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); // final int N = appWidgetIds.length;//实现单个widget更新的方法,暂时不用 // Log.d("app", "onUpdate--->Ids===" + String.valueOf(N)); // for (int i = 0; i < N; i++) {// 如果有很多同类widget是需要遍历的(他们的id是不同的) // int appWidgetId = appWidgetIds[i]; // updateAppWidget(context, appWidgetManager, appWidgetId);// // 更新widget的方法 // } updateAppWidget(context, appWidgetManager, appWidgetIds);// 更新widget的方法 } private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // 1.1,增加跳转用activity相关 intent RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); String tip = Tips.getTips();// 从Tips.java 获取警句 views.setTextViewText(R.id.textViewWidget, tip);// 设置 Intent intent = new Intent(context, TipEveryDayActivity.class);// 一下三句就可以启动Activity了 PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); views.setOnClickPendingIntent(R.id.textViewWidget, pendingIntent); Intent intent2 = new Intent("com.su.ontipclick");// 这三句就可以注册按钮事件了,确实比较麻烦 PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, intent2, 0); views.setOnClickPendingIntent(R.id.buttonChange, pendingIntent2); appWidgetManager.updateAppWidget(appWidgetIds, views);// 把widget的内容更新 } public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("com.su.ontipclick")) { Toast.makeText(context, "OK!!!!!", Toast.LENGTH_LONG).show();// 点击按钮会触发的事件 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);// 只能通过远程对象来设置appwidget中的控件状态 String tip = Tips.getTips();// 从Tips.java 获取警句 remoteViews.setTextViewText(R.id.textViewWidget, tip); AppWidgetManager appWidgetManager = AppWidgetManager .getInstance(context);// 获得appwidget管理实例,用于管理appwidget以便进行更新操作 ComponentName componentName = new ComponentName(context, TipEveryDayWidget.class);// 相当于获得所有本程序创建的appwidget appWidgetManager.updateAppWidget(componentName, remoteViews); } super.onReceive(context, intent); } }

在widget中注册事件比较麻烦,其实还是实现一个隐式intent,所以要在Manifest中注册这个intent


<receiver android:name=".TipEveryDayWidget" android:label="AAAAAAAATip"> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="com.su.ontipclick"></action><!-- 单击事件 --> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" /><!-- 这个是widget的配置文件,出来这个之外其他的不用管直接copy --> </receiver>
对了 对Tips.java做了小小的处理

package com.su.tipeveryday; public class Tips { public static Boolean flagBoolean =true; public static String getTips() { if (flagBoolean) { flagBoolean = false; return "宝剑锋从磨砺出,梅花香自苦寒来"; } else { flagBoolean=true; return "咬定青山不放松,立根原在破岩中"; } } }
呵呵要是看不懂我没办法了




转载于:https://www.cnblogs.com/sfshine/archive/2012/05/25/2524464.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值