- 浏览: 228595 次
- 性别:
- 来自: 广州
最新评论
-
Janne:
你好 有源代码?可以发到我的邮箱里学学吗?2731049993 ...
achartengine画出动态折线图的效果 -
anbo724:
我的邮箱 anbo724@gmail.com谢谢@
achartengine画出动态折线图的效果 -
anbo724:
你好 请问有源码没《?谢谢
achartengine画出动态折线图的效果 -
weiday123:
额,觉得这个会不会占堆内存?
AdapterView、Adapter优化 -
wen742538485:
为什么没有呢?权限没加还是发创建了给你删了再想创建?是不允许重 ...
Android中为你的应用程序添加桌面快捷方式
在开发Android的widget时,第一个需要解决的问题就是怎么实现让widget定时更新,在查阅比较多的资料后,一般情况用Service在后台更新,废话不多说,贴代码如下:
Widget:
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:
public class NewsService extends Service implements Runnable {
private static final String TAG="NewsService";
private static Queue<Integer> sAppWidgetIds=new LinkedList<Integer>();
public static final String ACTION_UPDATE_ALL = "com.xxxx.news.UPDATE_ALL";
private static boolean sThreadRunning = false;
private static Object sLock = new Object();
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static void updateAppWidgetIds(int[] appWidgetIds){
synchronized (sLock) {
for (int appWidgetId : appWidgetIds) {
sAppWidgetIds.add(appWidgetId);
}
}
}
public static int getNextWidgetId(){
synchronized (sLock) {
if (sAppWidgetIds.peek() == null) {
return AppWidgetManager.INVALID_APPWIDGET_ID;
} else {
return sAppWidgetIds.poll();
}
}
}
private static boolean hasMoreUpdates() {
synchronized (sLock) {
boolean hasMore = !sAppWidgetIds.isEmpty();
if (!hasMore) {
sThreadRunning = false;
}
return hasMore;
}
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if (null != intent) {
if (ACTION_UPDATE_ALL.equals(intent.getAction())) {
AppWidgetManager widget = AppWidgetManager.getInstance(this);
updateAppWidgetIds(widget.getAppWidgetIds(new ComponentName(this, NewsWidgetProvider.class)));
}
}
synchronized (sLock) {
if (!sThreadRunning) {
sThreadRunning=true;
new Thread(this).start();
}
}
}
@Override
public void run() {
SharedPreferences setting=getSharedPreferences("com.xxxx.news_preferences", 0);
String updateTime=setting.getString("list_time", "1800000");
String updateUrl=setting.getString("list_site", "xxxxxxxxx");
AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this);
RemoteViews updateViews=null;
while (hasMoreUpdates()) {
int appWidgetId=getNextWidgetId();
List<RssNews> listNews = NewsContenttList.getNewsList(updateUrl);
if (listNews != null) {
updateViews = NewsWidgetProvider.updateAppWidget(this, listNews);
}
if (updateViews != null) {
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
}
Intent updateIntent=new Intent(ACTION_UPDATE_ALL);
updateIntent.setClass(this, NewsService.class);
PendingIntent pending=PendingIntent.getService(this, 0, updateIntent, 0);
Time time = new Time();
long nowMillis = System.currentTimeMillis();
time.set(nowMillis+Long.parseLong(updateTime));
long updateTimes = time.toMillis(true);
Log.d(TAG, "request next update at "+updateTimes);
AlarmManager alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, updateTimes, pending);
stopSelf();
}
}
Widget:
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:
public class NewsService extends Service implements Runnable {
private static final String TAG="NewsService";
private static Queue<Integer> sAppWidgetIds=new LinkedList<Integer>();
public static final String ACTION_UPDATE_ALL = "com.xxxx.news.UPDATE_ALL";
private static boolean sThreadRunning = false;
private static Object sLock = new Object();
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static void updateAppWidgetIds(int[] appWidgetIds){
synchronized (sLock) {
for (int appWidgetId : appWidgetIds) {
sAppWidgetIds.add(appWidgetId);
}
}
}
public static int getNextWidgetId(){
synchronized (sLock) {
if (sAppWidgetIds.peek() == null) {
return AppWidgetManager.INVALID_APPWIDGET_ID;
} else {
return sAppWidgetIds.poll();
}
}
}
private static boolean hasMoreUpdates() {
synchronized (sLock) {
boolean hasMore = !sAppWidgetIds.isEmpty();
if (!hasMore) {
sThreadRunning = false;
}
return hasMore;
}
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if (null != intent) {
if (ACTION_UPDATE_ALL.equals(intent.getAction())) {
AppWidgetManager widget = AppWidgetManager.getInstance(this);
updateAppWidgetIds(widget.getAppWidgetIds(new ComponentName(this, NewsWidgetProvider.class)));
}
}
synchronized (sLock) {
if (!sThreadRunning) {
sThreadRunning=true;
new Thread(this).start();
}
}
}
@Override
public void run() {
SharedPreferences setting=getSharedPreferences("com.xxxx.news_preferences", 0);
String updateTime=setting.getString("list_time", "1800000");
String updateUrl=setting.getString("list_site", "xxxxxxxxx");
AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(this);
RemoteViews updateViews=null;
while (hasMoreUpdates()) {
int appWidgetId=getNextWidgetId();
List<RssNews> listNews = NewsContenttList.getNewsList(updateUrl);
if (listNews != null) {
updateViews = NewsWidgetProvider.updateAppWidget(this, listNews);
}
if (updateViews != null) {
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
}
Intent updateIntent=new Intent(ACTION_UPDATE_ALL);
updateIntent.setClass(this, NewsService.class);
PendingIntent pending=PendingIntent.getService(this, 0, updateIntent, 0);
Time time = new Time();
long nowMillis = System.currentTimeMillis();
time.set(nowMillis+Long.parseLong(updateTime));
long updateTimes = time.toMillis(true);
Log.d(TAG, "request next update at "+updateTimes);
AlarmManager alarm=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, updateTimes, pending);
stopSelf();
}
}
发表评论
-
Android Tween动画之RotateAnimation实现图片不停旋转
2012-11-26 22:38 1039本文主要介绍Android中如何使用rotate实现图片不停旋 ... -
来自腾讯、谷歌、百度等名企的精选面试五十题
2012-10-07 23:08 899http://www.apkway.com/thread-90 ... -
Android 中Parcelable的作用
2012-09-24 09:53 836android提供了一种新的类型:Parcel。本类被用作封装 ... -
[Android算法] 【eoeAndroid索引】史上最牛最全android开发知识汇总
2012-09-13 09:33 1094http://www.eoeandroid.com/threa ... -
安卓航班推荐70个具有商业实战性的精品Android源码
2012-08-01 00:00 912http://www.apkway.com/thread-58 ... -
Android测试教程汇总
2012-08-02 14:51 1058http://www.apkway.com/thread-67 ... -
Service 与 Thread 的区别
2012-07-26 00:10 874Service 与 Thread 的区别 很多时候,你可能 ... -
android 使用百度地图画轨迹
2012-07-26 00:08 2579import android.content.Context ... -
android百度地图半径画圆
2012-07-26 00:07 2696Java代码 import android.content ... -
Android下获取开机时间
2012-07-26 00:05 1298我的思路是:程序里注册个广播接收器,接收开机启动的广播,当程序 ... -
android 高仿【优酷】圆盘旋转菜单 的实现
2012-07-26 00:03 1332MyAnimation.java Java代码 pack ... -
android 3D 转盘效果(附源码)
2012-07-25 23:41 1778一个仿3D的转盘效果,有倒影特效,旋转图标还可自动放大缩小。由 ... -
Android Thread
2012-07-23 10:47 1012创建新线程的常用方式: 1. 直接使用Thread创建 ... -
Android 通过手说tts中文语音包实现中文朗读
2012-07-22 17:09 1776Android 通过手说tts中文语音包实现中文朗读 ... -
Android 使用HTTPClient调用Web请求(查询手机号码区域)
2012-07-21 00:33 1199Android通过Apache HttpClient调用网上提 ... -
Android+struts2+JSON方式的手机开发
2012-07-21 00:14 1138http://topmanopensource.iteye.c ... -
android九宫格实现
2012-07-21 00:03 938android九宫格实现,开始以为很复杂,其实只要知道了如何布 ... -
Android ListView圆角实现
2012-07-20 23:59 1175在android上开发项目,如 ... -
Android 将一个Activity转化为View显示出来
2012-07-19 10:27 2065最近看到好多opengl牛人写了些立方体,卷页之类的华丽的代码 ... -
Android EditText 为空提示 密码隐藏
2012-07-17 23:39 1101EditText为空时提示方法: 1.xml文件中设置,如: ...
相关推荐
Android 定时联网更新天气或心情的例子,启动任务线程,关闭定时更新时间的任务线程,定时发送Intent更新时间,定时发送Intent更新心情内容,并给心情文本View添加监听器,防止切屏后widget不工作了,因为本例用不到...
里面是一套完整的列表显示及刷新的小部件,虽然没有后台请求,但是可以自己改造下
Android 桌面小部件(widget)日签 ,展示农历阳历日期,一年进度,定时随机诗句
appwidget显示时间,每秒刷新一次
8 Android 天气预报加widget源码、 9 Android 条码扫描程序源码 10 Android 一个批量删除联系人的Demo 11 Android 指南针程序 12 Android操作数据库实例 13 android连接SQLite数据库-----增加改查+分页 14 Android...
Android 定时器实现图片的变换 在Android中,要让每秒进行一次ui更新,就需要利用到定时器和handler,message的结合,如果不使用handler就不能达到更新ui的效果,我的理解是handler中存在一个队列问题,可以保证不...
App的小功能点,很简单几十行代码就可以实现 主页面代码 ... import android.content.Intent; import android.os.Handler; import android.os.Message;...import android.widget.TextView; import com.b
9.2.1 实现Android中的广播事件 9.2.2 BroadCastReceiver介绍 9.3 应用实例详解 9.3.1 程序操作演示 9.3.2 实例编程实现 9.4 本章小结 第10章 一切为用户服务——Service应用实例 10.1 认识Service 10.2 使用...
9.2.1 实现Android中的广播事件 9.2.2 BroadCastReceiver介绍 9.3 应用实例详解 9.3.1 程序操作演示 9.3.2 实例编程实现 9.4 本章小结 第10章 一切为用户服务——Service应用实例 10.1 认识Service 10.2 使用...
从技术实现上,讲解了5个android平台下的完整综合实例及源代码分析,分别是rss阅读器、基于google map的个人gps、豆瓣网(web 2.0)客户端、在线音乐播放器、手机信息查看助手。本书注重对实际动手能力的指导,在遵循...
android网络新闻阅读器,定时更新,加本地缓存,外加Appwidget
从技术实现上,讲解了5个Android平台下的完整综合实例及源代码分析,分别是RSS阅读器、基于Google Map的个人GPS、豆瓣网(Web 2.0)客户端、在线音乐播放器、手机信息查看助手。《Android开发入门与实战》注重对实际...
2.定义Widget配置文件 3.定义Widget布局文件 4.定时发送广播给widget在widget的接收器做处理
9.2.1 实现Android中的广播事件 180 9.2.2 BroadCast Receiver介绍 181 9.3 应用实例详解 181 9.3.1 程序操作演示 182 9.3.2 实例编程实现 182 9.4 本章小结 186 第10章 一切为用户服务——...
6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定...
6.10 实现可定时响起的闹钟 335 6.11 黑名单来电自动静音 340 6.12 手机翻背面即静音振动 343 6.13 指定时间置换桌面背景 349 6.14 判断发送短信后的状态 357 6.15 后台服务送出广播信息 362 6.16...
6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定...
android闹钟是一款功能非常强大的闹钟,不仅仅可以替代系统的闹钟程序,还能定时启动程序功能,拥有漂亮的屏保、音乐播放、多种自带字体,数学公式提醒,自启动程序等等,支持android桌面的widget,自带时间显示,...
6.10 实现可定时响起的闹钟——PendingIntent与AlarmManager的运用 6.11 黑名单来电自动静音——PhoneStateListener与AudioManager 6.12 手机翻背面即静音震动——SensorListener及AudioManager整合应用 6.13 指定...