`
totoxian
  • 浏览: 1075720 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

(转)android AppWidgetProvider 定时刷新问题

 
阅读更多

AppWidgetProvider是专门用来制作android桌面组件的东东

本来想做一个小时钟

但是在定时刷新的时候遇到了问题

很多资料和书上的方法是

在onUpdate()方法中

用Intent请求Service

Intent intent = new Intent(context, UpdateService.class);
context.startService(intent);
在service中的onStart()或者onReceive()方法中来实现更新界面

而在AndroidManifest.xml中定义一个receiver

<receiver
android:label="@string/app_name"
android:name=".DeskMain">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/my_widget_provider" >
</meta-data>
</receiver>
DeskMain是你的AppWidgetProvider类@xml/my_widget_provider是提供UI信息的配置文件 比如宽高

android.appwidget.action.APPWIDGET_UPDATE 书上的解释是 当AppWidget更新时会收到的系统广播信息

但是用eclipse填写xml的时候这个选项已经没有了于是上网查了一下

在 appwidget-provider 用 android:updatePeriodMillis这种方式已经在SKD1.5以后被废了

解决的办法找了一下 大概总结了几种

1.在onUpdate()中用自己的Timer和TimerTask解决

http://www.eoeandroid.com/thread-50955-1-1.html

2.用Thread

3.Intent intent=new Intent(context ,WidgetService.class);
PendingIntent refreshIntent=PendingIntent.getService(context, 0, intent, 0);
AlarmManager alarm=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC, 0, 1000, refreshIntent);//每秒1次
context.startService(intent);


service类↓

  1. publicclassWidgetServiceextendsService
  2. {
  3. @Override
  4. publicIBinderonBind(Intentintent)
  5. {
  6. returnnull;
  7. }
  8. @Override
  9. publicvoidonStart(Intentintent,intstartId)
  10. {
  11. super.onStart(intent,startId);
  12. RemoteViewsrv=newRemoteViews(this.getPackageName(),R.layout.app);
  13. rv.setTextViewText(R.id.av1,newDate().toLocaleString());
  14. ComponentNamecn=newComponentName(this,DeskMain.class);
  15. AppWidgetManageram=AppWidgetManager.getInstance(this);
  16. am.updateAppWidget(cn,rv);
  17. }
  18. }

AppWidgetProvider类↓

  1. publicclassDeskMainextendsAppWidgetProvider
  2. {
  3. @Override
  4. publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,
  5. int[]appWidgetIds)
  6. {
  7. Log.i("syso","update3...................");
  8. Intentintent=newIntent(context,WidgetService.class);
  9. PendingIntentrefreshIntent=PendingIntent.getService(context,0,intent,0);
  10. AlarmManageralarm=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
  11. alarm.setRepeating(AlarmManager.RTC,0,1000,refreshIntent);
  12. context.startService(intent);
  13. }
  14. @Override
  15. publicvoidonReceive(Contextcontext,Intentintent)
  16. {
  17. Log.i("syso","receive...................");
  18. super.onReceive(context,intent);
  19. }

AndroidManifest.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.app"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
  7. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"android:screenOrientation="portrait"android:permission="android.permission.ACCESS_FINE_LOCATION">
  8. <activityandroid:name=".Main"
  9. android:label="@string/app_name">
  10. <!---->
  11. <receiver
  12. android:label="@string/app_name"
  13. android:name=".DeskMain">
  14. <intent-filter>
  15. <actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/>
  16. </intent-filter>
  17. <meta-dataandroid:name="android.appwidget.provider"
  18. android:resource="@xml/my_widget_provider">
  19. </meta-data>
  20. </receiver>
  21. <serviceandroid:name="WidgetService"/>
  22. </application>
  23. <uses-sdkandroid:minSdkVersion="7"/>
  24. </manifest>

layout下的app.xml UI布局 xml下的my_widget_provider.xml 提供了UI宽高信息

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"android:orientation="horizontal"android:gravity="center">
  6. <ImageViewandroid:src="@drawable/icon"android:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/imageView1"></ImageView>
  7. <TextView
  8. android:gravity="center"android:text="TextView"android:id="@+id/av1"android:layout_width="wrap_content"android:layout_height="wrap_content"></TextView>
  9. </LinearLayout>
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <appwidget-providerxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:minWidth="95dip"
  4. android:minHeight="73dip"
  5. android:initialLayout="@layout/app"/>

转自:http://blog.csdn.net/maydie1989/article/details/6460163

分享到:
评论

相关推荐

    android AppWidgetProvider httpclient 扒取网页

    总结起来,这个项目涉及到Android AppWidgetProvider的使用,通过HttpClient从web服务器获取数据,解析HTML,更新Widget显示,设置定时刷新,以及使用Notification进行交互。这些知识点涵盖了Android应用开发中的多...

    appwidget时间每秒刷新一次

    综上所述,创建一个每秒刷新时间的AppWidget涉及到对`AppWidgetProvider`的理解、使用`Handler`进行定时任务、布局设计以及元数据配置等多个方面。通过精心设计和实现,你可以为用户提供一个实用且实时的桌面时钟小...

    android app widget小部件

    在这个名为"AppWidget-master"的压缩包中,我们很可能是得到了一个示例项目,用于演示如何创建一个能够显示列表并支持刷新功能的Android App Widget。 首先,我们需要理解App Widget的基本架构。App Widget由XML...

    android之appwidget(四)终 appwidget控件更新

    3. **Widget更新触发器**: 可以通过设置AlarmManager定时触发更新,也可以监听特定事件,如接收到新的通知或数据更改时更新Widget。 **三、源码分析** 1. **AppWidgetProvider的onReceive()方法**: 当接收到广播时...

    Android 时钟 Widget Demo

    对于时钟Widget,我们需要定期更新时间显示,这通常通过AlarmManager配合BroadcastReceiver实现定时刷新。 6. **添加动画效果**: - “Android Animation”标签提示我们这个Demo可能包含了动画元素。可以使用`...

    android之appwidget

    - **更新**: 当需要更新小部件内容时(如定时刷新或接收到特定广播),`onUpdate()`会被调用。开发者可以通过`AppWidgetManager`的`updateAppWidget()`方法来手动更新。 - **删除**: 用户从主屏幕移除小部件时,`...

    Android自定义时钟

    Android时钟通常依赖于系统提供的`android.appwidget.AppWidgetProvider`类,它是一个广播接收器,用于监听与桌面小部件相关的事件。在自定义时钟时,我们需要继承这个类,并覆盖其`onUpdate()`方法,以便在每次时钟...

    widget定时更新

    "Widget定时更新"这个主题聚焦于如何通过Service组件来实现在后台定期更新Widget的内容,特别是更新图片,这是Android Widget功能的一个常见需求。 首先,我们来理解Widget和Service的基本概念。Widget是Android...

    android桌面便签

    2. **实现AppWidgetProvider**:这是Android为Widget提供的特殊BroadcastReceiver,负责处理Widget的点击事件和其他更新操作。当用户在便签中输入文字并保存时,AppWidgetProvider会接收到相应的广播,并更新Widget...

    Android桌面控件文本显示时间

    在Android平台上,开发人员可以利用AppWidgetProvider和Service组件创建桌面小部件(Widget),实现桌面实时显示并自动刷新时间的功能。这种技术不仅提升了用户的交互体验,也为应用提供了更丰富的展示方式。下面将...

    android时钟源代码

    Android系统存在多个版本,因此源代码需要考虑兼容性问题。开发者可能会使用Support Library或者AndroidX库来保证应用在不同设备上的表现一致。同时,还需要关注不同API级别的特性和限制,以实现更广泛的设备支持。 ...

    android widget 窗口小部件

    这一步对于实现动态更新窗口小部件的内容至关重要,比如定时刷新天气信息或者根据用户操作改变小部件的状态。 此外,我们还需要为用户提供一个Intent-Filter,让他们能够通过长按主屏幕空白区域添加窗口小部件。在...

    Android代码-Widget快捷拨号程序源码.zip

    例如,可以设置一个AlarmManager来定时刷新Widget,或者在收到新的电话号码时立即更新。 以上是“Widget快捷拨号程序源码”中涉及的主要知识点,通过学习和理解这些内容,开发者可以掌握创建和管理Android App ...

    Android电量显示Widgets插件源码.zip

    1. AppWidgetProvider:它是Android中处理Widget事件的组件,类似于BroadcastReceiver,用于响应用户的交互或系统的广播事件。 2. AppWidgetProviderInfo:定义了Widget的元数据,包括Widget的大小、更新间隔、初始...

    数字时钟-android4.0.3

    使用AlarmManager配合BroadcastReceiver可以设置定时任务,确保时间的准确刷新。 3. **12/24小时制切换**:Android系统提供了一种API,可以获取用户的日期和时间格式偏好。通过`android.text.format.DateFormat.is...

    Android程序研发源码Android Widget快捷拨号程序源码.zip

    3. **AlarmManager**:可能用到定时更新Widget的逻辑,如定期刷新联系人信息。 4. **SharedPreferences**:存储用户自定义的快捷拨号联系人信息,实现个性化设置。 5. **ContentProvider**和Uri匹配:如果应用涉及...

    Android的数字钟实例

    这个“Android的数字钟实例”是一个很好的学习资源,它涵盖了Android平台上的时间显示、UI设计以及可能涉及到的定时更新机制。 首先,Android的数字钟通常是一个自定义的View组件,它需要继承自`View`或`AppWidget`...

    Android代码-一个电池widget

    首先,电池小部件的基础是`AppWidgetProvider`类,它是Android专门为小部件设计的BroadcastReceiver子类。在项目中,会有一个`BatteryWidgetProvider.java`文件,该文件定义了小部件的行为,如在小部件添加、删除或...

    Android 最近联系人软件

    总结起来,开发“Android最近联系人软件”涉及到的关键知识点包括:Android的联系人API和ContentProvider,Widget的实现和RemoteViews的使用,定时更新机制,事件监听,以及版本适配和应用发布流程。理解并掌握这些...

Global site tag (gtag.js) - Google Analytics