功能大概是 长按屏幕->请求一个超玩三国杀AppWidget->进入configure activity配置信息->在桌面上显示UI->点击新闻进入activity中浏览
首先在AppWidgetProvider启动前 利用 AppWidgetProvider界面配置文件中的android:configure属性来指定一个前置activity用来配置相关信息
[html] view plain copy print ?
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minWidth="280dip"
- android:minHeight="175dip"
- android:configure="com.activity.MyNoteConf"
- android:initialLayout="@layout/app"/>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="280dip" android:minHeight="175dip" android:configure="com.activity.MyNoteConf" android:initialLayout="@layout/app"/>
不过指定的activity需要在AndroidManifest.xml中声明该activity中加入
[html] view plain copy print ?
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
- </intent-filter>
<intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /> </intent-filter>
在请求AppWidgetProvider之前会先执行MyNoteConf这个activity 需要注意的是在这个 configure 的 activity 中需要setResult()
返回一个结果如果是setResult(RESULT_CANCELED);或者是 在activity中点返回键退出 对AppWidgetProvider的请求都讲被终止
只有在setResult(RESULT_OK, resultValue);的情况下对AppWidgetProvider的请求可以继续进行 其中 resultValue 是一个封装了 mAppWidgetId 参数的Intent
[java] view plain copy print ?
- Intent resultValue = new Intent();
- resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,mAppWidgetId );
Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,mAppWidgetId );
mAppWidgetId 是你AppWidgetProvider的Id 可以在activity中获得
[java] view plain copy print ?
- Intent intent = getIntent();
- Bundle extras = intent.getExtras();
- if (extras != null) {
- mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
- }
Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID); }
在这个activity中可以做很多实例AppWidgetProvider之前要完成的事 比如说定义AppWidgetProvider的某些UI的颜色,样式,大小的信息 AppWidgetProvider刷新间隔的信息等等吧
完整所有的只需要finish();就可以解释configure 的activity了
至于如何在configure 的activity 向AppWidgetProvider传值 我也没能做到 最后还是把一些配置信息储存在了application中了 比较麻烦
在AppWidgetProvider 界面汇总 大概是若干个 textview 和一个 button. button负责点击进入更新activity ,而 每个textview对应一条新闻 点击进入activity用webview浏览
所以每个textview需要一个PendingIntent 在 PendingIntent 描述的Intent中需要传递一些参数给负责浏览的activity 比如是第几条或者其他的
[java] view plain copy print ?
- Intent intent = new Intent(context,Main.class);
- Bundle b = new Bundle();
- b.putInt("pageNo", i);
- intent.putExtras(b);
- intent.setAction(String.valueOf(System.currentTimeMillis()));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
Intent intent = new Intent(context,Main.class); Bundle b = new Bundle(); b.putInt("pageNo", i); intent.putExtras(b); intent.setAction(String.valueOf(System.currentTimeMillis())); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pi = PendingIntent.getActivity(context, 0, intent, 0);
如果不加红色的部分或者用PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);的话也可以实现向activity传值 但是最终无论里点击哪一条新闻
最后在activity中接收到的总是最后一个PendingIntent对应Intent中的值 因为 PendingIntent.FLAG_UPDATE_CURRENT 会覆盖之前的值
这样在activity中得到点击的是哪一条的参数值后就可以进行浏览了 我用的是Webview+ViewFlipper 这样无论点哪一条 在activity中都可以翻页浏览其他的 还可以加入Notification 负责显示上次更新时间 并且点击 进入到更新
由于没有新闻的数据 所以用httpclient + 一个第三方解析html的东西 jericho-html-2.5.jar 扒取了 超玩三国杀站的数据 取了前几条新闻的标题和URL地址 用了下 所以准备数据比较慢
至于定时刷新是用Timer+TimerTask做的 不知道好不好
下载地址 http://download.csdn.net/source/3419921
android 版本2.1 在手机上跑得起来 模拟器不知道