Android实现widget定时更新

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 {


	@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);
	}

}


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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值