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类↓
-
publicclassWidgetServiceextendsService
-
{
-
-
@Override
-
publicIBinderonBind(Intentintent)
-
{
-
returnnull;
-
}
-
-
@Override
-
publicvoidonStart(Intentintent,intstartId)
-
{
-
super.onStart(intent,startId);
-
RemoteViewsrv=newRemoteViews(this.getPackageName(),R.layout.app);
-
rv.setTextViewText(R.id.av1,newDate().toLocaleString());
-
ComponentNamecn=newComponentName(this,DeskMain.class);
-
AppWidgetManageram=AppWidgetManager.getInstance(this);
-
am.updateAppWidget(cn,rv);
-
}
-
}
AppWidgetProvider类↓
-
publicclassDeskMainextendsAppWidgetProvider
-
{
-
-
@Override
-
publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,
-
int[]appWidgetIds)
-
{
-
Log.i("syso","update3...................");
-
Intentintent=newIntent(context,WidgetService.class);
-
PendingIntentrefreshIntent=PendingIntent.getService(context,0,intent,0);
-
AlarmManageralarm=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
-
alarm.setRepeating(AlarmManager.RTC,0,1000,refreshIntent);
-
context.startService(intent);
-
}
-
-
@Override
-
publicvoidonReceive(Contextcontext,Intentintent)
-
{
-
Log.i("syso","receive...................");
-
super.onReceive(context,intent);
-
}
AndroidManifest.xml
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
-
package="com.app"
-
android:versionCode="1"
-
android:versionName="1.0">
-
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
-
-
-
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name"android:screenOrientation="portrait"android:permission="android.permission.ACCESS_FINE_LOCATION">
-
<activityandroid:name=".Main"
-
android:label="@string/app_name">
-
-
<receiver
-
android:label="@string/app_name"
-
android:name=".DeskMain">
-
<intent-filter>
-
<actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"/>
-
</intent-filter>
-
<meta-dataandroid:name="android.appwidget.provider"
-
android:resource="@xml/my_widget_provider">
-
</meta-data>
-
</receiver>
-
<serviceandroid:name="WidgetService"/>
-
-
</application>
-
<uses-sdkandroid:minSdkVersion="7"/>
-
-
</manifest>
layout下的app.xml UI布局 xml下的my_widget_provider.xml 提供了UI宽高信息
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayout
-
xmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"android:orientation="horizontal"android:gravity="center">
-
<ImageViewandroid:src="@drawable/icon"android:layout_height="wrap_content"android:layout_width="wrap_content"android:id="@+id/imageView1"></ImageView>
-
-
<TextView
-
android:gravity="center"android:text="TextView"android:id="@+id/av1"android:layout_width="wrap_content"android:layout_height="wrap_content"></TextView>
-
</LinearLayout>
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<appwidget-providerxmlns:android="http://schemas.android.com/apk/res/android"
-
android:minWidth="95dip"
-
android:minHeight="73dip"
-
android:initialLayout="@layout/app"/>
转自:http://blog.csdn.net/maydie1989/article/details/6460163
分享到:
相关推荐
总结起来,这个项目涉及到Android AppWidgetProvider的使用,通过HttpClient从web服务器获取数据,解析HTML,更新Widget显示,设置定时刷新,以及使用Notification进行交互。这些知识点涵盖了Android应用开发中的多...
综上所述,创建一个每秒刷新时间的AppWidget涉及到对`AppWidgetProvider`的理解、使用`Handler`进行定时任务、布局设计以及元数据配置等多个方面。通过精心设计和实现,你可以为用户提供一个实用且实时的桌面时钟小...
在这个名为"AppWidget-master"的压缩包中,我们很可能是得到了一个示例项目,用于演示如何创建一个能够显示列表并支持刷新功能的Android App Widget。 首先,我们需要理解App Widget的基本架构。App Widget由XML...
3. **Widget更新触发器**: 可以通过设置AlarmManager定时触发更新,也可以监听特定事件,如接收到新的通知或数据更改时更新Widget。 **三、源码分析** 1. **AppWidgetProvider的onReceive()方法**: 当接收到广播时...
对于时钟Widget,我们需要定期更新时间显示,这通常通过AlarmManager配合BroadcastReceiver实现定时刷新。 6. **添加动画效果**: - “Android Animation”标签提示我们这个Demo可能包含了动画元素。可以使用`...
- **更新**: 当需要更新小部件内容时(如定时刷新或接收到特定广播),`onUpdate()`会被调用。开发者可以通过`AppWidgetManager`的`updateAppWidget()`方法来手动更新。 - **删除**: 用户从主屏幕移除小部件时,`...
Android时钟通常依赖于系统提供的`android.appwidget.AppWidgetProvider`类,它是一个广播接收器,用于监听与桌面小部件相关的事件。在自定义时钟时,我们需要继承这个类,并覆盖其`onUpdate()`方法,以便在每次时钟...
"Widget定时更新"这个主题聚焦于如何通过Service组件来实现在后台定期更新Widget的内容,特别是更新图片,这是Android Widget功能的一个常见需求。 首先,我们来理解Widget和Service的基本概念。Widget是Android...
2. **实现AppWidgetProvider**:这是Android为Widget提供的特殊BroadcastReceiver,负责处理Widget的点击事件和其他更新操作。当用户在便签中输入文字并保存时,AppWidgetProvider会接收到相应的广播,并更新Widget...
在Android平台上,开发人员可以利用AppWidgetProvider和Service组件创建桌面小部件(Widget),实现桌面实时显示并自动刷新时间的功能。这种技术不仅提升了用户的交互体验,也为应用提供了更丰富的展示方式。下面将...
Android系统存在多个版本,因此源代码需要考虑兼容性问题。开发者可能会使用Support Library或者AndroidX库来保证应用在不同设备上的表现一致。同时,还需要关注不同API级别的特性和限制,以实现更广泛的设备支持。 ...
这一步对于实现动态更新窗口小部件的内容至关重要,比如定时刷新天气信息或者根据用户操作改变小部件的状态。 此外,我们还需要为用户提供一个Intent-Filter,让他们能够通过长按主屏幕空白区域添加窗口小部件。在...
例如,可以设置一个AlarmManager来定时刷新Widget,或者在收到新的电话号码时立即更新。 以上是“Widget快捷拨号程序源码”中涉及的主要知识点,通过学习和理解这些内容,开发者可以掌握创建和管理Android App ...
1. AppWidgetProvider:它是Android中处理Widget事件的组件,类似于BroadcastReceiver,用于响应用户的交互或系统的广播事件。 2. AppWidgetProviderInfo:定义了Widget的元数据,包括Widget的大小、更新间隔、初始...
使用AlarmManager配合BroadcastReceiver可以设置定时任务,确保时间的准确刷新。 3. **12/24小时制切换**:Android系统提供了一种API,可以获取用户的日期和时间格式偏好。通过`android.text.format.DateFormat.is...
3. **AlarmManager**:可能用到定时更新Widget的逻辑,如定期刷新联系人信息。 4. **SharedPreferences**:存储用户自定义的快捷拨号联系人信息,实现个性化设置。 5. **ContentProvider**和Uri匹配:如果应用涉及...
这个“Android的数字钟实例”是一个很好的学习资源,它涵盖了Android平台上的时间显示、UI设计以及可能涉及到的定时更新机制。 首先,Android的数字钟通常是一个自定义的View组件,它需要继承自`View`或`AppWidget`...
首先,电池小部件的基础是`AppWidgetProvider`类,它是Android专门为小部件设计的BroadcastReceiver子类。在项目中,会有一个`BatteryWidgetProvider.java`文件,该文件定义了小部件的行为,如在小部件添加、删除或...
总结起来,开发“Android最近联系人软件”涉及到的关键知识点包括:Android的联系人API和ContentProvider,Widget的实现和RemoteViews的使用,定时更新机制,事件监听,以及版本适配和应用发布流程。理解并掌握这些...