Java代码
  1. publicclassNewsWidgetProviderextendsAppWidgetProvider{
  2. @Override
  3. publicvoidonDeleted(Contextcontext,int[]appWidgetIds){
  4. }
  5. @Override
  6. publicvoidonDisabled(Contextcontext){
  7. //TODOAuto-generatedmethodstub
  8. super.onDisabled(context);
  9. }
  10. @Override
  11. publicvoidonEnabled(Contextcontext){
  12. //TODOAuto-generatedmethodstub
  13. super.onEnabled(context);
  14. }
  15. @Override
  16. publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,int[]appWidgetIds){
  17. NewsService.updateAppWidgetIds(appWidgetIds);
  18. context.startService(newIntent(context,NewsService.class));
  19. }
  20. publicstaticRemoteViewsupdateAppWidget(Contextcontext,List<RssNews>list){
  21. RemoteViewsviews=newRemoteViews(context.getPackageName(),R.layout.appwidget_layout);
  22. if(list.size()>3){
  23. views.setTextViewText(R.id.textView01,list.get(0).title);
  24. views.setTextViewText(R.id.textView02,list.get(1).title);
  25. views.setTextViewText(R.id.textView03,list.get(2).title);
  26. }
  27. IntentdetailIntent=newIntent(context,NewsSiteList.class);
  28. PendingIntentpending=PendingIntent.getActivity(context,0,detailIntent,0);
  29. views.setOnClickPendingIntent(R.id.textView01,pending);
  30. views.setOnClickPendingIntent(R.id.textView02,pending);
  31. views.setOnClickPendingIntent(R.id.textView03,pending);
  32. returnviews;
  33. }
  34. @Override
  35. publicvoidonReceive(Contextcontext,Intentintent){
  36. super.onReceive(context,intent);
  37. }
  38. }
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:
Java代码
  1. publicclassNewsServiceextendsServiceimplementsRunnable{
  2. privatestaticfinalStringTAG="NewsService";
  3. privatestaticQueue<Integer>sAppWidgetIds=newLinkedList<Integer>();
  4. publicstaticfinalStringACTION_UPDATE_ALL="com.xxxx.news.UPDATE_ALL";
  5. privatestaticbooleansThreadRunning=false;
  6. privatestaticObjectsLock=newObject();
  7. @Override
  8. publicIBinderonBind(Intentintent){
  9. returnnull;
  10. }
  11. publicstaticvoidupdateAppWidgetIds(int[]appWidgetIds){
  12. synchronized(sLock){
  13. for(intappWidgetId:appWidgetIds){
  14. sAppWidgetIds.add(appWidgetId);
  15. }
  16. }
  17. }
  18. publicstaticintgetNextWidgetId(){
  19. synchronized(sLock){
  20. if(sAppWidgetIds.peek()==null){
  21. returnAppWidgetManager.INVALID_APPWIDGET_ID;
  22. }else{
  23. returnsAppWidgetIds.poll();
  24. }
  25. }
  26. }
  27. privatestaticbooleanhasMoreUpdates(){
  28. synchronized(sLock){
  29. booleanhasMore=!sAppWidgetIds.isEmpty();
  30. if(!hasMore){
  31. sThreadRunning=false;
  32. }
  33. returnhasMore;
  34. }
  35. }
  36. @Override
  37. publicvoidonCreate(){
  38. super.onCreate();
  39. }
  40. @Override
  41. publicvoidonStart(Intentintent,intstartId){
  42. super.onStart(intent,startId);
  43. if(null!=intent){
  44. if(ACTION_UPDATE_ALL.equals(intent.getAction())){
  45. AppWidgetManagerwidget=AppWidgetManager.getInstance(this);
  46. updateAppWidgetIds(widget.getAppWidgetIds(newComponentName(this,NewsWidgetProvider.class)));
  47. }
  48. }
  49. synchronized(sLock){
  50. if(!sThreadRunning){
  51. sThreadRunning=true;
  52. newThread(this).start();
  53. }
  54. }
  55. }
  56. @Override
  57. publicvoidrun(){
  58. SharedPreferencessetting=getSharedPreferences("com.xxxx.news_preferences",0);
  59. StringupdateTime=setting.getString("list_time","1800000");
  60. StringupdateUrl=setting.getString("list_site","xxxxxxxxx");
  61. AppWidgetManagerappWidgetManager=AppWidgetManager.getInstance(this);
  62. RemoteViewsupdateViews=null;
  63. while(hasMoreUpdates()){
  64. intappWidgetId=getNextWidgetId();
  65. List<RssNews>listNews=NewsContenttList.getNewsList(updateUrl);
  66. if(listNews!=null){
  67. updateViews=NewsWidgetProvider.updateAppWidget(this,listNews);
  68. }
  69. if(updateViews!=null){
  70. appWidgetManager.updateAppWidget(appWidgetId,updateViews);
  71. }
  72. }
  73. IntentupdateIntent=newIntent(ACTION_UPDATE_ALL);
  74. updateIntent.setClass(this,NewsService.class);
  75. PendingIntentpending=PendingIntent.getService(this,0,updateIntent,0);
  76. Timetime=newTime();
  77. longnowMillis=System.currentTimeMillis();
  78. time.set(nowMillis+Long.parseLong(updateTime));
  79. longupdateTimes=time.toMillis(true);
  80. Log.d(TAG,"requestnextupdateat"+updateTimes);
  81. AlarmManageralarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
  82. alarm.set(AlarmManager.RTC_WAKEUP,updateTimes,pending);
  83. stopSelf();
  84. }
  85. }

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. android java.util.ConcurrentModificationException
  4. Android签到功能的实现
  5. android MediaPlayer 错误代码(error code)总结
  6. android开机启动代码
  7. Android(安卓)App应用底部导航栏实现的一种方式
  8. Android录音及播放功能实现
  9. Android通过Mainfest设置Theme实现布局全屏

随机推荐

  1. Android 中自定义 Adapter
  2. Android应用程序键盘(Keyboard)消息处理机
  3. android如何获取url指定的图片资源
  4. 【Android】在开发项目的时候,利用Android
  5. android java打印栈信息
  6. Android提示:使用或覆盖了已过时的 API
  7. Android的Handler机制详解2_native
  8. [2].FFMpeg入门之 - Android使用FFMpeg命
  9. Android(安卓)中的数据库操作
  10. android 判断系统是否有Navigation Bar