Android实现widget定时更新
来源:互联网 发布:淘宝儿童服装 编辑:程序博客网 时间:2024/09/21 08:17
- public class NewsWidgetProvider extends AppWidgetProvider {
- @Override
- public void onDeleted(Context context, int[] appWidgetIds) {
- }
- @Override
- public void onDisabled(Context context) {
- // TODO Auto-generated method stub
- super.onDisabled(context);
- }
- @Override
- public void onEnabled(Context context) {
- // TODO Auto-generated method stub
- super.onEnabled(context);
- }
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
- NewsService.updateAppWidgetIds(appWidgetIds);
- context.startService(new Intent(context,NewsService.class));
- }
- public static RemoteViews updateAppWidget(Context context,List<RssNews> list) {
- RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.appwidget_layout);
- if (list.size() > 3) {
- views.setTextViewText(R.id.textView01, list.get(0).title);
- views.setTextViewText(R.id.textView02, list.get(1).title);
- views.setTextViewText(R.id.textView03, list.get(2).title);
- }
- Intent detailIntent=new Intent(context,NewsSiteList.class);
- PendingIntent pending=PendingIntent.getActivity(context, 0, detailIntent, 0);
- views.setOnClickPendingIntent(R.id.textView01, pending);
- views.setOnClickPendingIntent(R.id.textView02, pending);
- views.setOnClickPendingIntent(R.id.textView03, pending);
- return views;
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- super.onReceive(context, intent);
- }
- }
public class NewsWidgetProvider extends AppWidgetProvider {@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {}@Overridepublic void onDisabled(Context context) {// TODO Auto-generated method stubsuper.onDisabled(context);}@Overridepublic void onEnabled(Context context) {// TODO Auto-generated method stubsuper.onEnabled(context);}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {NewsService.updateAppWidgetIds(appWidgetIds);context.startService(new Intent(context,NewsService.class));}public static RemoteViews updateAppWidget(Context context,List<RssNews> list) {RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.appwidget_layout);if (list.size() > 3) {views.setTextViewText(R.id.textView01, list.get(0).title);views.setTextViewText(R.id.textView02, list.get(1).title);views.setTextViewText(R.id.textView03, list.get(2).title);}Intent detailIntent=new Intent(context,NewsSiteList.class);PendingIntent pending=PendingIntent.getActivity(context, 0, detailIntent, 0);views.setOnClickPendingIntent(R.id.textView01, pending);views.setOnClickPendingIntent(R.id.textView02, pending);views.setOnClickPendingIntent(R.id.textView03, pending);return views;}@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);}}
Service:
- public class NewsService extends Service implements Runnable {
- private static final String TAG="NewsService";
- private static Queue<Integer> sAppWidgetIds=new LinkedList<Integer>();
- public static final String ACTION_UPDATE_ALL = "com.xxxx.news.UPDATE_ALL";
- private static boolean sThreadRunning = false;
- private static Object sLock = new Object();
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- public static void updateAppWidgetIds(int[] appWidgetIds){
- synchronized (sLock) {
- for (int appWidgetId : appWidgetIds) {
- sAppWidgetIds.add(appWidgetId);
- }
- }
- }
- public static int getNextWidgetId(){
- synchronized (sLock) {
- if (sAppWidgetIds.peek() == null) {
- return AppWidgetManager.INVALID_APPWIDGET_ID;
- } else {
- return sAppWidgetIds.poll();
- }
- }
- }
- private static boolean hasMoreUpdates() {
- synchronized (sLock) {
- boolean hasMore = !sAppWidgetIds.isEmpty();
- if (!hasMore) {
- sThreadRunning = false;
- }
- return hasMore;
- }
- }
- @Override
- public void onCreate() {
- super.onCreate();
- }
- @Override
- public void onStart(Intent intent, int startId) {
- super.onStart(intent, startId);
- if (null != intent) {
- if (ACTION_UPDATE_ALL.equals(intent.getAction())) {
- AppWidgetManager widget = AppWidgetManager.getInstance(this);
- updateAppWidgetIds(widget.getAppWidgetIds(new ComponentName(this, NewsWidgetProvider.class)));
- }
- }
- synchronized (sLock) {
- if (!sThreadRunning) {
- sThreadRunning=true;
- new Thread(this).start();
- }
- }
- }
- @Override
- public void run() {
- SharedPreferences setting=getSharedPreferences("com.xxxx.news_preferences", 0);
- String updateTime=setting.getString("list_time", "1800000");
- String updateUrl=setting.getString("list_site", "xxxxxxxxx");
- AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this);
- RemoteViews updateViews=null;
- while (hasMoreUpdates()) {
- int appWidgetId=getNextWidgetId();
- List<RssNews> listNews = NewsContenttList.getNewsList(updateUrl);
- if (listNews != null) {
- updateViews = NewsWidgetProvider.updateAppWidget(this, listNews);
- }
- if (updateViews != null) {
- appWidgetManager.updateAppWidget(appWidgetId, updateViews);
- }
- }
- Intent updateIntent=new Intent(ACTION_UPDATE_ALL);
- updateIntent.setClass(this, NewsService.class);
- PendingIntent pending=PendingIntent.getService(this, 0, updateIntent, 0);
- Time time = new Time();
- long nowMillis = System.currentTimeMillis();
- time.set(nowMillis+Long.parseLong(updateTime));
- long updateTimes = time.toMillis(true);
- Log.d(TAG, "request next update at "+updateTimes);
- AlarmManager alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
- alarm.set(AlarmManager.RTC_WAKEUP, updateTimes, pending);
- stopSelf();
- }
- }
- Android实现widget定时更新
- Android实现widget定时更新
- Android widget定时更新及事件处理
- android AppWidget的使用以及利用TimerTask实现widget的定时更新
- android AppWidget的使用以及利用Service TimerTask实现widget的定时更新
- Android widget更新 监听
- android widget不更新
- 开启一个服务定时更新widget组件
- 【Android】widget不能及时更新
- android service 更新widget UI
- android-widget实现跳转
- Android的widget实现
- Android的Widget的定时刷新
- Android 定时更新UI
- Android在后台线程实现 定时更新时间
- Android 开发之实时更新 App Widget
- Android 开发之实时更新 App Widget
- Android 开发之实时更新 App Widget
- mranney / node_redis源代码阅读
- Sphider + SCWS,打造完美PHP中文搜索引擎
- 最近学习的困惑以及解决的办法
- WEB安全
- Android常用功能实例
- Android实现widget定时更新
- windows mobile 如何读写XML文档 1
- 平面多边形区域的扫描线填充算法
- Javascript 中 null、NaN和undefined的区别
- 我总结的18种1至100的求和方法(使用C++语言)
- 让TextArea支持Tab键(兼容IE、FF)
- div模拟textarea文本域现高度自适应
- windows7环境下驱动程序开发环境搭建(VS2008+WDK)
- 将A数组中含有的元素并且B数组中没有的输出到一个新的list中