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例程(MP3播放)
android2.1下 用httpclient拿取sgs.sgamer.com的新闻 用AppWidgetProvider展示 定时刷新 Notification 点击浏览
安装后需用户添加桌面小工具中添加
自己改的一个App Widget通过service和定时器实现定时更新的源码,自己改的一个App Widget通过service和定时器实现定时更新的源码,自己改的一个App Widget通过service和定时器实现定时更新的源码
本篇文章小编为大家介绍,基于Android AppWidgetProvider的使用。需要的朋友参考下
主要为大家详细介绍了Android控件AppWidgetProvider的使用方法详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
基于Android系统的AppWidgetProvider分析.pdf
android 桌面组件 App widget的使用.
android最简单的日历widget显示 没有Activity,只有widget,主要是继承AppWidgetProvider; 布局是layout布局和xml布局结合 在AndroidManifext.xml中注册 中为xml文件下文件名称。
本文实例讲述了Android编程之桌面小部件AppWidgetProvider用法。分享给大家供大家参考,具体如下: /** * 桌面小部件 AppWidget配置 * * @description: * @author ldm * @date 2016-5-16 下午1:57:16 */ ...
完整的Android工程源码,使用WidgetConfig,防止了在Widget添加Application时出现的重复添加问题。
Android 运用AppWidgetProvider 和 Service 实现在生成桌面小空间实时显示刷新时间。
该java文件时一个类,继承AppWidgetProvider这个类,复写其中的onDeleted,onDisabled,onEnabled,onReceive,onUpdate等方法。其中几个方法都是与AppWidgetProvider的生命周期有关的。其中onDeleted()方法是当app...
此例是我看Mars老师视频,写的一个例子。上传上去,是为了记录一下
目录 第1章 绪论 1 1.1 项目背景 1 1.2 研究现状 1 1.3 论文组织 2 第2章 ANDROID开发环境 3 ...5.7 在APPWIDGETPROVIDER类中获取INTENT的附加信息 37 5.8 软件使用 38 结论 41 致谢 42 参考文献 43
本文实例讲述了Android Appwidget用法。分享给大家供大家参考,具体如下: App Widgets 是一个小型应用程序的View 他可以嵌入到其他应用程序中(如 桌面程序) 并且可以得到周期性刷新。 在创建App Widget之前需要...
Android appWidget 每日一句 修正网络获取