ch014 Android(安卓)AppWidget
--------------------------------------------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-->
更多相关文章
- ch010 Android(安卓)GridView
- 解决Android(安卓)Studio 和 Android(安卓)SDK Manager 无法在线
- CSDN 很经典的博客 您值得一览
- 去掉Android(安卓)TextView 去掉内边距
- 局域网内搭建Android(安卓)SDK更新源
- Android(安卓)SDK更新失败对策
- Android指定调用系统自带浏览器打开链接
- Android(安卓)P系统时间更新分析
- Android设备功能之传感器教程篇