--------------------------------------------AndroidManifest.xml------------------------------

<manifestxmlns:android="http://schemas.android.com/apk/res/android"

package="com.ch14"

android:versionCode="1"

android:versionName="1.0">

<uses-sdk

android:minSdkVersion="10"

android:targetSdkVersion="15"/>

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme">

<activity

android:name=".MainActivity"

android:label="@string/title_activity_main">

<intent-filter>

<actionandroid:name="com.ch14"/>

<categoryandroid:name="android.intent.category.DEFAULT"/>

</intent-filter>

</activity>

<receiverandroid:name=".MyAppWidgetProvider">

<meta-data

android:name="android.appwidget.provider"

android:resource="@xml/appwidget_my"/>

<intent-filter>

<actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE">

</action>

</intent-filter>

</receiver>

</application>

</manifest>

--------------------------------------------XMLappwidget_my.xml--------------------------

<?xmlversion="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/myappwidgetlayout"

>

</appwidget-provider>

<!--updatePeriodMillis=0为手动更新-->

--------------------------------------------Layoutactivity_main.xml------------------------

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_centerVertical="true"

android:text="@string/hello_world"/>

</RelativeLayout>

--------------------------------------------Layoutmyappwidgetlayout.xml-----------------

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

<Button

android:id="@+id/txtapp"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:text="send........">

</Button>

</LinearLayout>

--------------------------------------------MainActivity.java---------------------------------

packagecom.ch14;

importandroid.app.Activity;

importandroid.os.Bundle;

publicclassMainActivityextendsActivity{

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

}

--------------------------------------------MyAppWidgetProvider.java-----------------------

packagecom.ch14;

importcom.ch14.util.LogOut;

importandroid.app.PendingIntent;

importandroid.appwidget.AppWidgetManager;

importandroid.appwidget.AppWidgetProvider;

importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.Intent;

importandroid.widget.RemoteViews;

/**

*

*项目名称:com.ch14

*类名称:MyAppWidgetProvider

*类描述:自定义窗口小部件

*创建人:方勇

*创建时间:2012-11-22下午9:05:00

*Copyright(c)方勇-版权所有

*/

publicclassMyAppWidgetProviderextendsAppWidgetProvider{

/*接受广播事件*/

@Override

publicvoidonReceive(Contextcontext,Intentintent){

LogOut.out(this,"onReceive()");

/*只能通过远程对象来设置MyAppWidgetProvider中的控件状态*/

RemoteViewsremoteViews=newRemoteViews(context.getPackageName(),R.layout.myappwidgetlayout);

/*管理AppWidgetProvider,以便进行更新操作*/

AppWidgetManagerappWidgetManager=AppWidgetManager.getInstance(context);

/*获得本程序创建的appwidget*/

ComponentNamecomponentName=newComponentName(context,MyAppWidgetProvider.class);

/*更新appwidget*/

appWidgetManager.updateAppWidget(componentName,remoteViews);

super.onReceive(context,intent);

}

/*组件被放置到桌面上时,或者刷新时间到达时调用*/

@Override

publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,int[]appWidgetIds){

LogOut.out(this,"onUpdate()");

RemoteViewsremoteViews=newRemoteViews(context.getPackageName(),R.layout.myappwidgetlayout);

Intentintent=newIntent();

intent.setAction("com.ch14");

/*

*延迟执行的INTENT

*

*1、常使用的是FLAG_UPDATE_CURRENT,因为描述的Intent有更新的时候需要用到这个flag去更新你的描述,

*否则组件在下次事件发生或时间到达的时候extras永远是第一次Intent的extras。

*

*2、使用FLAG_CANCEL_CURRENT也能做到更新extras,只不过是先把前面的extras清除

*

*3、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT的区别在于能否new一个Intent,

*FLAG_UPDATE_CURRENT能够new一个Intent,而

*FLAG_CANCEL_CURRENT则不能,只能使用第一次的Intent。

*

*4、(比较少用)

*FLAG_ONE_SHOT获取的PendingIntent只能使用一次,再使用PendingIntent也将失败

*FLAG_NO_CREAT获取的PendingIntent描述的Intent不存在则返回NULL值.

*

*/

PendingIntentpendingIntent=PendingIntent.getActivity(context,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

/*通过PendingIntent和mRemoteViews.setOnClickPendingIntent为AppWidget中的Button设置监听器*/

remoteViews.setOnClickPendingIntent(R.id.txtapp,pendingIntent);

remoteViews.setTextViewText(R.id.txtapp,"A07");

appWidgetManager.updateAppWidget(appWidgetIds,remoteViews);

super.onUpdate(context,appWidgetManager,appWidgetIds);

}

/*删除一个AppWidget组件时被调用*/

@Override

publicvoidonDeleted(Contextcontext,int[]appWidgetIds){

LogOut.out(this,"onDeleted()");

super.onDeleted(context,appWidgetIds);

}

/*AppWidget的实例第一次被创建时调用*/

@Override

publicvoidonEnabled(Contextcontext){

LogOut.out(this,"onEnabled()");

super.onEnabled(context);

}

/*最后一个AppWidget组件被删除时调用*/

@Override

publicvoidonDisabled(Contextcontext){

LogOut.out(this,"onDisabled()");

super.onDisabled(context);

}

}

--------------------------------------------LogOut.java---------------------------------------

packagecom.ch14.util;

importandroid.util.Log;

/**

*

*项目名称:com.ch14

*类名称:LogOut

*类描述:指定日志输出格式

*创建人:方勇

*创建时间:2012-11-22下午9:35:41

*Copyright(c)方勇-版权所有

*/

publicclassLogOut{

publicstaticfinalStringTAG="A07";

privatestaticfinalbooleanDEBUG=true;

publicstaticvoidout(Objectobj,Stringinfo){

if(DEBUG){

Stringtag=TAG;

if(info.startsWith("length")){

tag=TAG+"_TMP";

}

if(objinstanceofString){

Log.d(tag,((String)obj)+"->"+info);

}else{

Log.d(tag,obj.getClass().toString().substring(6)+"->"+info);

}

}

}

publicstaticvoidout(Objectobj,Stringtag,Stringinfo){

if(DEBUG){

if(objinstanceofString){

Log.d(TAG+"_"+tag,((String)obj)+"->"+info);

}else{

Log.d(TAG+"_"+tag,obj.getClass().toString().substring(6)

+"->"+info);

}

}

}

}

--------------------------------------------结果------------------------------------------------

1、长按桌面(或选中桌面的某个位置,长按鼠标左键)

ch014 Android AppWidget_第1张图片

2、弹出对话框

ch014 Android AppWidget_第2张图片

3、选中后,桌面多了个按钮部件

ch014 Android AppWidget_第3张图片

4、双击AppWidget

ch014 Android AppWidget_第4张图片

<!--EndFragment-->

更多相关文章

  1. 自定义android RadioPreference组件
  2. android中怎么让 button组件居中显示
  3. Android 常用组件,的常用类型
  4. Android用户界面UI组件--AdapterView及其子类(四) GridView
  5. Android架构组件-App架构指南
  6. Android架构组件-Paging库的使用
  7. 详解 Android 的 Activity 组件
  8. Android架构组件- Room数据库的使用
  9. Android架构组件-WorkManager

随机推荐

  1. springmvc服务端+android客户端的文件上
  2. Android中获取SQL Server中的数据
  3. Android安装过程
  4. android ScrollView--Linearlayout可以上
  5. 【android之ADB命令】ADB SHELL 命令乱码
  6. Android利用Ksoap2连接webservice 源码
  7. ubuntu 搭建android编译环境
  8. android > 获取 通讯录 信息
  9. android 音效
  10. android添加各种权限整理