直接上代码:
步骤:
01.先创建一个类继承AppWidgetProvider
package com.senk.appwidget; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.RemoteViews; public class ExampleAppwidgetProvider extends AppWidgetProvider { /** * 当一个App Wediget实例被删除时,会调用该方法 */ @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); Log.v("tag", "onDeleted"); } /** * 当最后一个App Wediget实例被删除后,会调用该方法 */ @Override public void onDisabled(Context context) { super.onDisabled(context); Log.v("tag", "onDisabled"); } /** * 当一个App Widget的实例第一次被创建时,会调用该方法 */ @Override public void onEnabled(Context context) { super.onEnabled(context); Log.v("tag", "onEnabled"); } /** * 接受广播事件 */ @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Log.v("tag", "onReceive"); } /** * 在大道指定的更新时间之后或者当用户向桌面添加App Widget时回调用该方法 */ @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // appWidgetIds表示每创建一个appwiget就为她分配一个ID for (int i = 0; i < appWidgetIds.length; i++) { Log.v("tag", appWidgetIds[i]+""); // 创建一个intent对象 Intent intent = new Intent(context,OtherActivity.class); // 创建一个PandingIntent PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); // RemoteViews代表的是我们创建的所有的appwidget的控件 RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_appwidget); // 为按钮绑定处理器 // 第一个参数用来指定绑定处理器的控件的 id // 第二个参数用来指定当事件发生时,哪个PendingIntent将会被执行 remoteViews.setOnClickPendingIntent(R.id.widgetButtonId, pendingIntent); // 更新AppWidget // 第一个参数用于指定被更新Appwidget的ID // 第二个参数用户指定被更新RemoteViews对象 appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews); } super.onUpdate(context, appWidgetManager, appWidgetIds); } }
02.在res/layout文件夹下创建一个Appwediget布局的xml文件:我这里建的是名为example_appwidget.xml
<?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/widgetTextId" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="firstWidgetText" android:background="#000000"/> <Button android:id="@+id/widgetButtonId" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="测试按钮"/> </LinearLayout>
03.定义AppWidgetProviderInfo:我这里在res/xml文件夹当中定义一个名为example_appwidget_info.xmld的文件:
<?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="86400000" android:initialLayout="@layout/example_appwidget"> </appwidget-provider>
04.最后在AndroidManifest.xml中添加如下:注意红色<receiver>标签部分
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.senk.appwidget" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".OtherActivity" android:label="这是从屏幕上的widget跳转过来的页面"/> <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> </application> </manifest>
05.最后,为widget上的按钮添加跳转的页面,即点击widget上的一个按钮,就跳转到这个页面,我这里建的是一个名为OtherActivity的类
这个页面里面什么也没有,仅仅做下演示看下效果
package com.senk.appwidget; import android.app.Activity; public class OtherActivity extends Activity { }
MainActivity.java中也是什么也没有,因为这里暂时用不着,我们重点在于看widget的效果
package com.senk.appwidget; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
同样main.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" > </LinearLayout>
06.项目的目录结构:
07.效果图: