android widget的自动更新

service类
  1. public   class  WidgetService  extends  Service  
  2. {  
  3.   
  4.     @Override   
  5.     public  IBinder onBind(Intent intent)  
  6.     {         
  7.         return   null ;  
  8.     }  
  9.       
  10.     @Override   
  11.     public   void  onStart(Intent intent,  int  startId)  
  12.     {     
  13.         super .onStart(intent, startId);  
  14.         RemoteViews rv = new  RemoteViews( this .getPackageName(), R.layout.app);  
  15.         rv.setTextViewText(R.id.av1, new  Date().toLocaleString());  
  16.         ComponentName cn = new  ComponentName( this , DeskMain. class );  
  17.         AppWidgetManager am = AppWidgetManager.getInstance(this );  
  18.         am.updateAppWidget(cn, rv);  
  19.     }  
  20. }  
AppWidgetProvider类
  1. public   class  DeskMain  extends  AppWidgetProvider  
  2. {  
  3.   
  4.     @Override   
  5.     public   void  onUpdate(Context context, AppWidgetManager appWidgetManager,  
  6.             int [] appWidgetIds)  
  7.     {  
  8.         Log.i("syso""update3..................." );  
  9.         Intent intent=new  Intent(context ,WidgetService. class );  
  10.         PendingIntent refreshIntent=PendingIntent.getService(context, 0 , intent,  0 );  
  11.         AlarmManager alarm=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);  
  12.         alarm.setRepeating(AlarmManager.RTC, 01000 , refreshIntent);  
  13.         context.startService(intent);        
  14.     }  
  15.       
  16.     @Override   
  17.     public   void  onReceive(Context context, Intent intent)  
  18.     {  
  19.         Log.i("syso""receive..................." );  
  20.         super .onReceive(context, intent);  
  21.     } 
AndroidManifest.xml
  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < manifest   xmlns:android = "http://schemas.android.com/apk/res/android"   
  3.       package = "com.app"   
  4.       android:versionCode = "1"   
  5.       android:versionName = "1.0" >   
  6. < uses-permission   android:name = "android.permission.ACCESS_FINE_LOCATION" > </ uses-permission >   
  7.   
  8.   
  9.     < application   android:icon = "@drawable/icon"   android:label = "@string/app_name"   android:screenOrientation = "portrait"   android:permission = "android.permission.ACCESS_FINE_LOCATION" >   
  10.         < activity   android:name = ".Main"   
  11.                   android:label = "@string/app_name" >   
  12.      <!--  -->   
  13.     < receiver   
  14.       android:label = "@string/app_name"   
  15.       android:name = ".DeskMain" >   
  16.             < intent-filter >     
  17.                 < action   android:name = "android.appwidget.action.APPWIDGET_UPDATE"   />     
  18.             </ intent-filter >     
  19.      < meta-data   android:name = "android.appwidget.provider"   
  20.         android:resource = "@xml/my_widget_provider"   >   
  21.       </ meta-data >   
  22.     </ receiver >   
  23.     < service   android:name = "WidgetService"   />   
  24.       
  25.     </ application >   
  26.     < uses-sdk   android:minSdkVersion = "7"   />     
  27.       
  28. </ manifest >  



我们在做widget开发时,要解决的主要问题是怎么做到实时刷新,比如当我们在一个activity里点击插入或删除操作时,能够使widget上显示的数据条数刷新
下面是在activity里要实现的代码:
  1. Intent intent =  new  Intent( "com.android.CLICK" );  
  2.             ResultActivity.this .sendBroadcast(intent); 

我们还要在AndroidMainifest.xml的<intent-filter>里定制:
  1. <action android:name= "com.android.CLICK" ></action> 

在widget类里我们用onReceive方法:
  1. //把数据显示上widget   
  2.             RemoteViews views = new  RemoteViews(context.getPackageName(), R.layout.main);  
  3.             String strLine = System.getProperty("line.separator" );  
  4.             views.setTextViewText(R.id.note_text, “要显示的信息”);  
  5.               
  6.             //添加响应事件   
  7.             intent = new  Intent(context, OperateActivity. class );    
  8.               
  9.               
  10.             PendingIntent Pintent= PendingIntent.getActivity(context, 0 , intent,  0 );  
  11.             views.setOnClickPendingIntent(R.id.widget, Pintent);  
  12.               
  13.             //最后更新   
  14.             AppWidgetManager  appWidgetManager=AppWidgetManager.getInstance(context);  
  15.             appWidgetManager.updateAppWidget(new  ComponentName(context, Note. class ), views); 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要实现 Android Widget 定时更新,可以通过在 AppWidgetProvider 类中使用定时器(Timer)或者 Handler 来实现。以下是一个使用定时器的示例: 1. 在 AppWidgetProvider 类中定义定时器: ``` private Timer timer; @Override public void onEnabled(Context context) { super.onEnabled(context); // 每隔一段时间更新 widget timer = new Timer(); timer.scheduleAtFixedRate(new MyTimerTask(context), 0, 5000); } @Override public void onDisabled(Context context) { super.onDisabled(context); // 取消定时器 if (timer != null) { timer.cancel(); timer = null; } } private static class MyTimerTask extends TimerTask { private Context context; public MyTimerTask(Context context) { this.context = context; } @Override public void run() { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); ComponentName componentName = new ComponentName(context, MyWidget.class); int[] appWidgetIds = appWidgetManager.getAppWidgetIds(componentName); onUpdate(context, appWidgetManager, appWidgetIds); } } ``` 2. 在 onUpdate() 方法中更新 widget: ``` @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { // 更新 widget 视图 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); remoteViews.setTextViewText(R.id.widget_textview, "当前时间:" + System.currentTimeMillis()); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } } ``` 这样就可以实现每隔 5 秒更新一次 widget 的效果。注意,如果用户删除了所有的 widget 实例,onDisabled() 方法会被调用,需要在该方法中取消定时器。 ### 回答2: 在Android中,Widget是一种小型应用程序,可以在主屏幕上显示信息和提供交互功能。默认情况下,Widget更新是通过定时器来实现的。 Android提供了一个叫做AlarmManager的类,它可以在预定的时间间隔或特定时间点执行某个任务。我们可以使用AlarmManager来定时更新Widget。 首先,需要创建一个广播接收器(BroadcastReceiver)来接收AlarmManager发送的定时广播。该广播接收器可以在接收到广播后执行相应的操作,例如更新Widget的UI。 然后,在需要定时更新Widget的地方,可以使用以下代码来设置AlarmManager: ```java // 获取AlarmManager实例 AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); // 创建Intent,用于启动广播接收器 Intent intent = new Intent(this, MyWidgetReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); // 设置定时任务,每隔30分钟触发一次 long intervalMillis = 30 * 60 * 1000; // 30分钟 alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), intervalMillis, pendingIntent); ``` 上述代码中,`MyWidgetReceiver`是我们自己创建的广播接收器类名,可以根据实际情况进行修改。 最后,在`MyWidgetReceiver`的`onReceive()`方法中,可以编写相应的更新Widget的逻辑代码。例如,可以重新获取数据并更新Widget的UI。 通过以上步骤,我们可以实现Widget的定时更新功能。每隔设定的时间间隔,AlarmManager会发送一个广播,然后我们的广播接收器就可以接收到该广播,从而执行更新Widget的操作。 ### 回答3: 在Android中,Widget是一种可以在桌面上显示信息和功能的小部件。默认情况下,Widget并不会定时更新,但我们可以通过设置定时任务来实现Widget的定时更新。 首先,我们需要在Widget的Provider类中创建一个定时任务。可以使用AlarmManager类来设置定时任务,其中setRepeating()方法可以设置重复执行任务的时间间隔。在PendingIntent中,我们可以指定要触发的广播接收器。 接下来,我们需要创建一个广播接收器类,用于接收定时任务触发的广播,并在其中处理Widget更新的逻辑。可以通过重写onReceive()方法来实现,在这个方法中,我们可以更新Widget的视图,例如更新文本、图片等。 然后,我们需要在AndroidManifest.xml文件中注册广播接收器,这样才能让系统发送广播给该接收器。在receiver标签中,我们需要指定接收的广播类型,可以使用android.appwidget.action.APPWIDGET_UPDATE这个动作来接收Widget更新的广播。 最后,在Widget的布局文件中,添加用于显示数据的视图组件,例如TextView、ImageView等。这些视图组件会在定时任务触发后被更新。 总结而言,要实现Android Widget的定时更新,我们需要创建一个定时任务,并通过广播接收器来处理Widget更新逻辑,然后在AndroidManifest.xml文件中注册广播接收器,最后在Widget的布局文件中添加适当的视图组件。这样,Widget就可以按照设定的时间间隔自动更新了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值