widget必须继承AppWidgetProvider
在AppWidgetProvider源码中可以看到AppWidgetProvider继承了BroadcastReceiver
也就是说widget本身就是个BroadcastReceiver(广播接受者)
AndroidManifest.xml中配置
<receiver android:name="ExampleAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>
当往窗口添加widget是会发出更新广播
更新广播的名称为"android.appwidget.action.APPWIDGET_UPDATE"
meta-data为组件提供参数
android:name="android.appwidget.provider"为固定的
android:resource="@xml/example_appwidget_info"为widght所采用的界面
example_appwidget_info.xml代码
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"
android:updatePeriodMillis="0"
android:initialLayout="@layout/time_appwidget">
</appwidget-provider>
time_appwidget.xml代码
<?xml version="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="vertical"
android:background="@drawable/rectangle" >
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/textView"
android:textColor="@android:color/black"
android:textSize="20dp"
android:text="Just For Test"/>
</LinearLayout>
一个简单的wdiget,只有一句话"Just For Test"
接下来改进一下,把文字换成时间
public class TimeWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time = dateFormat.format(System.currentTimeMillis());
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.time_appwidget);
remoteView.setTextViewText(R.id.textView, time);
appWidgetManager.updateAppWidget(appWidgetIds[0], remoteView);
}
}
部署后时间出来了,但是时间是固定的,没有改变,需要加入服务
新建服务
package com.ice.widght;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
import android.widget.RemoteViews;
public class TimeWidgetService extends Service {
private Timer timer;
@Override
public void onCreate() {
timer = new Timer();
timer.schedule(new TimeUpdateTask(), 0, 1000);
}
private class TimeUpdateTask extends TimerTask{
@Override
public void run() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time = dateFormat.format(System.currentTimeMillis());
RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.time_appwidget);
remoteView.setTextViewText(R.id.textView, time);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
appWidgetManager.updateAppWidget(
new ComponentName(getApplicationContext(), TimeWidgetProvider.class), remoteView);
}
}
@Override
public void onDestroy() {
timer.cancel();
timer = null;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
TimeWidgetProvider重构代码,负责开启和销毁服务
public class TimeWidgetProvider extends AppWidgetProvider {
@Override
public void onEnabled(Context context) {
context.startService(new Intent(context, TimeWidgetService.class));
}
@Override
public void onDisabled(Context context) {
context.stopService(new Intent(context, TimeWidgetService.class));
}
}
完工~~~
分享到:
相关推荐
在Android开发中,Widget是应用程序在用户主屏幕上的一种表现形式,它允许开发者为用户提供轻量级的交互体验,即便在应用程序未打开时也能提供服务。本篇将详细讲解"android widget"这一主题,主要基于 mars 老师的 ...
该项目为基于Java开发的Android Widget设计源码集,总计包含137个文件,其中XML配置文件67个,Java源文件48个,PNG图片文件7个,...项目汇集了一系列Android Widget的使用技巧,旨在帮助开发者提升Widget开发效率。
在Android开发中,Widget是应用在主屏幕上的小型UI组件,它们可以提供用户与应用...这就是如何在Android Widget中使用ListView布局的简要概述。通过实践和调整,你可以根据项目的具体需求进一步定制和优化这个功能。
5. **配置Activity(如果存在)**: 如果项目包含配置Activity,研究其如何收集用户输入并保存到 SharedPreferences,以供Widget使用。 6. **测试和调试**: 使用Android模拟器或连接的设备进行测试,观察Widget的...
本教程将详细介绍如何在Android项目中创建和使用一个简单的Widget。 1. **理解Android Widget** Android小部件是基于AppWidgetProvider类的,它是一个BroadcastReceiver的子类,负责处理小部件的更新、点击等事件...
本资料包"androidWidget小组件开发.zip"包含了一个名为"MyWidget"的示例项目,可能包含了关于如何创建和实现Android Widget小组件的代码和资源。 1. **Widget组件概述** - Android Widget是Android系统中的一个...
总之,实现“android Widget点击后进入ListView显示内容”涉及到多个Android开发的关键概念,包括Widget编程、ListView的操作、Intent的使用以及自定义Adapter的编写。通过这个过程,开发者可以深入理解Android应用...
通过使用RemoteViews类,我们可以将布局文件的内容加载到Widget中,并对其进行动态更新。 为了使Widget具有交互性,我们需要在AppWidgetProvider的onReceive()方法中处理ACTION_APPWIDGET_UPDATE和ACTION_APPWIDGET...
本教程将深入探讨如何使用Android Widget,通过提供的源码实例,涵盖了一系列基本到高级的组件,包括Button、Chronometer、Clock、DateTime、Edit、Gallery、Grid、Misc、Popup、Progress、Spinner和Video。...
对于Android开发者来说,使用Axure制作Widget原型可以帮助他们在设计阶段更好地理解和规划应用界面。这个“android axure widget包”就是一组专门针对Android平台的Axure组件库,由用户自己制作并分享。 标题中的...
Android AppWidget是Android系统提供的一种桌面小部件功能,允许开发者创建可以放置在用户主屏幕上的小型应用程序。这些小部件不需要用户直接启动,而是持续显示在屏幕上,为用户提供快速访问或控制应用的功能。在这...
在Android应用开发中,Widget组件是用户界面的一个重要组成部分,它允许开发者将应用程序的功能和信息直接展示在用户的桌面或通知栏上,无需打开应用程序。Widget提供了便捷的方式,让用户可以快速交互,增强了用户...
本文将详细介绍Android AppWidget的使用方法,并提供一个示例程序来帮助理解。 首先,AppWidget的构成主要包含以下几个部分: 1. **AppWidgetProvider**: 这是Android的BroadcastReceiver子类,用于接收和处理与...
总结,创建一个集成高德地图定位API的天气Widget需要对Android的Widget机制、地图API的使用、以及服务和广播接收器的交互有深入理解。通过以上步骤,你可以构建一个实用且美观的桌面小部件,为用户提供便捷的天气...
在Android操作系统中,Widget是应用程序在主屏幕上的小型视图,允许用户与应用程序进行交互而无需实际打开应用。深入理解Android Widget的源码对于开发者来说至关重要,因为这可以帮助他们优化用户体验,实现更丰富...
在Android平台上,Widget是一种轻量级的应用组件,它可以在用户的主屏幕上展示信息,提供快捷操作,无需用户打开完整的应用程序。Android Widget开发学习教程主要涵盖了如何创建和配置一个基本的Widget,包括以下几...
9. **源代码解析**: 通过对源代码的分析,我们可以学习到如何使用Android的Widget API、数据绑定、动画以及时间同步策略等。这有助于提升对Android系统和应用程序开发的理解。 10. **性能优化**: 在实现时钟Widget...
- **AndroidWidget项目**:这个压缩包中的示例可能包含一个完整的Android项目,包括src代码、res资源文件和AndroidManifest.xml配置文件。 - **主要类**:通常会有一个名为WidgetProvider的AppWidgetProvider子类...
本主题聚焦于"Android桌面插件-时钟widget",这是一个非常实用且常见的组件,它能为用户提供即时的时间显示,甚至支持多时区时间查看。 时钟Widget是Android系统中的一个核心组件,开发者可以通过自定义实现来提供...