--------------------------------------------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、长按桌面(或选中桌面的某个位置,长按鼠标左键)

2、弹出对话框

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

4、双击AppWidget

<!--EndFragment-->

更多相关文章

  1. ch010 Android(安卓)GridView
  2. 解决Android(安卓)Studio 和 Android(安卓)SDK Manager 无法在线
  3. CSDN 很经典的博客 您值得一览
  4. 去掉Android(安卓)TextView 去掉内边距
  5. 局域网内搭建Android(安卓)SDK更新源
  6. Android(安卓)SDK更新失败对策
  7. Android指定调用系统自带浏览器打开链接
  8. Android(安卓)P系统时间更新分析
  9. Android设备功能之传感器教程篇

随机推荐

  1. linux CentOS 7.4下 mysql5.7.20 密码改
  2. mysql全文模糊搜索MATCH AGAINST方法示例
  3. 深入讲解MySQL Innodb索引的原理
  4. 解压版MYSQL安装及遇到的错误及解决方法
  5. 如何使用MySQL一个表中的字段更新另一个
  6. 设置mysql5.7编码集为utf8mb4的方法
  7. Centos7 安装mysql 8.0.13(rpm)的教程详解
  8. windows10系统安装mysql-8.0.13(zip安装)
  9. mysql修改数据库默认路径无法启动问题的
  10. MySQL如何更改数据库数据存储目录详解