1、AndroidManifest.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mars.appwidget"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="mars.appwidget.Activity01"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 新添加的内容 -->
<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>
<!--声明一个新的.java文件 -->
<activity
android:name="mars.appwidget.TargetActivity"
android:label="@string/appbutton">
</activity>
</application>
</manifest>
2、布局文件:
(1、)main.xml代码:[===Activity01.java]
<RelativeLayout xmlns: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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Activity01" > <TextView android:id="@+id/tapptext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/main" android:textSize="20sp"/> </RelativeLayout>
(2、)example_appwidget.xml代码:[===ExampleAppWidgetProvider.java]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/apptext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/appwidget"
android:textSize="20sp"/>
<Button
android:id="@+id/appbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/appbutton"/>
</LinearLayout>
(3、)target.xml代码:[===TargetActivity.java]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tapptext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/main2"
android:textSize="20sp"/>
</LinearLayout>
3、运行调用:
(1、)Activity01.java代码(无改变)
package mars.appwidget;
import android.app.Activity;
import android.os.Bundle;
public class Activity01 extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
(2、)ExampleAppWidgetProvider.java代码:(实现AppWidgetProvider)
package mars.appwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class ExampleAppWidgetProvider extends AppWidgetProvider{
//1、onUpdate
//context 上下文对象
//appWidgetManager 专门管理appWidget对象
//appWidgetIds 为每次添加进来appWidget的绑定一个ID
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
//有几个组件,就循环几次
for(int i=0;i<appWidgetIds.length;i++){
//创建一个Intent对象
Intent intent=new Intent(context,TargetActivity.class);
//创建一个PendingIntent对象,用.getActivity方法创建(包装盒)(事件的结果是打开一个Activity)
//getService;getActivity;getBroadcast
PendingIntent pendingIntent=PendingIntent.getActivity(context, 0, intent, 0);
//RemoteViews代表所有控件
RemoteViews remoteviews=new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
//为按钮绑定事件处理器
//第一个参数:指定被绑定处理器的ID
//第二个参数:指定事件发生时,那个PendingIntent会执行
remoteviews.setOnClickPendingIntent(R.id.appbutton,pendingIntent);
//更新AppWidget
//第一个参数:指定被更新AppWidget的ID
appWidgetManager.updateAppWidget(appWidgetIds[i],remoteviews);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
//2、onDeleted
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
}
//3
public void onDisabled(Context context){
super.onDisabled(context);
}
//4
public void onEnabled(Context context){
super.onEnabled(context);
}
//5
public void onReceive(Context context,Intent intent){
super.onReceive(context,intent);
}
}
(3、)TargetActivity.java代码:(点击桌面按钮时执行显示的Activity)
package mars.appwidget;
import android.app.Activity;
import android.os.Bundle;
public class TargetActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.target);
}
}
4、运行效果:
自动运行的界面:
桌面小部件:
点击“测试用按钮”,显示的界面“