Android--桌面组件AppWidget
来源:互联网 发布:wtybill 知乎 编辑:程序博客网 时间:2024/05/17 08:18
AppWidget通常被称为桌面插件,是Android系统应用开发层上的重要部分,是把一个进程的控件嵌入到别外一个进程的窗口里的一种方法,是与客户端程序交互的组件程序。
先看看效果图:
下面进行实例记录如何创建AppWidget,它是如何与客户端程序进行交互:
第一步:在res目录下新建xml文件夹并创建
ywx_appwidget_info.xml
<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="100dp" android:minHeight="30dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/ywx_appwidget"></appwidget-provider>
第二步:新建布局文件ywx_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/widgetText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/appwidget" android:background="#000000"/> <ImageView android:id="@+id/imageId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/load" android:contentDescription="@id/imageId"/> <Button android:id="@+id/widgetBut" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/widgetText"/> </LinearLayout>
第三步:新建一个ExampleAppWidgetProvider.java,实现AppWidgetProvider中的方法
package com.ywx.appwidget_04;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.widget.RemoteViews;public class ExampleAppWidgetProvider extends AppWidgetProvider{private static final String UPDATE_ACTION = "com.ywx.appwidget_04.UPDATE_APP_WIDGET";//接收广播事件@Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);}//在到达指定的更新时间之后或者当用户向桌面添加App Widget时会调用该方法@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {super.onUpdate(context, appWidgetManager, appWidgetIds);} //当AppWidget被删除时,会调用该方法@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {super.onDeleted(context, appWidgetIds);}//当一个AppWidget的实例第一次被创建时会调用该方法@Overridepublic void onEnabled(Context context) {super.onEnabled(context);}//当最后一个AppWidget实例被删除后调用该方法@Overridepublic void onDisabled(Context context) {super.onDisabled(context);}}
第四步:在AndroidManifest.xml中声明:这里有两个actiong,一个是系统的,一个是自定义的,只要满足任何一个action就会触发事件
<receiver android:name="ExampleAppWidgetProvider"> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/> </intent-filter> <intent-filter > <action android:name="com.ywx.appwidget_04.UPDATE_APP_WIDGET"/> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/ywx_appwidget_info"/> </receiver>
完成以上四步就能够完成简单的AppWidget示例。
在AppWidget开发过程中主要运用到了PendingIntent和RemoteViews,下面将用法记录如下:
PendingIntent主要的三个方法:
1.getActivity(Context context,int requestCode,Intent intent,int flags)
2.getBroadcast(Context context,int requestCode,Intent intent,int flags)
3.getService(Context context,int requestCode,Intent intent,int flags)
RemoteViews的作用:表示一系列的view对象及所表示的对象运行在另外的进程当中。
appwidget组件程序并不是处在当前的进程当中,所以对于监听器的绑定事件与原来的有所区别:
在onUpdate()方法中添加
Intent intent = new Intent();intent.setAction(UPDATE_ACTION);//使用getBroadcast生成PendingIntent,当对象执行时,发送广播PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.ywx_appwidget);remoteViews.setOnClickPendingIntent(R.id.widgetBut, pendingIntent);appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
在onRecive()方法中添加
String action = intent.getAction();if(UPDATE_ACTION.equals(action)){RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.ywx_appwidget);remoteViews.setImageViewResource(R.id.imageId, R.drawable.upload);remoteViews.setTextViewText(R.id.widgetText, "娃哈哈");AppWidgetManager appWidgeManager = AppWidgetManager.getInstance(context);ComponentName componentName = new ComponentName(context,ExampleAppWidgetProvider.class);appWidgeManager.updateAppWidget(componentName, remoteViews);}else{super.onReceive(context, intent);}
- android桌面组件AppWidget
- Android--桌面组件AppWidget
- 理解与应用Android桌面组件AppWidget
- 桌面组件AppWidget
- AppWidget(桌面组件)
- android 桌面控件appwidget
- Android AppWidget组件
- Android:AppWidget 桌面小控件
- 【Android】AppWidget桌面小部件
- Android桌面小部件AppWidget
- Android 自定义桌面空间 AppWidget
- 开发android的桌面小程序AppWidget
- android 中的AppWidget(桌面小部件)
- Android——AppWidget桌面插件学习
- android------(桌面小玩意-getActivity)AppWidget
- Android:AppWidget之桌面小电筒
- Android 桌面小组件AppWidget的使用
- Android桌面小部件AppWidget(1)
- nyoj-830-旋转坐标系
- 光流场法介绍及代码
- itext in action英文版教程demo中关于Hsqldb的设置
- MVC中的过滤器
- 浅谈C++多态性
- Android--桌面组件AppWidget
- android添加自定义LOG函数。
- Microservices (by Martin Fowler) 译文
- onSaveInstanceState和onRestoreInstanceState详解
- 用链表写的学生管理系统 成绩的录入与查询都已经是实现了
- 【Dave】Oracle SQL优化 总结
- js实现页面跳转的几种方式
- SSO之CAS基础及应用视频教程(2)
- Microservices (by Martin Fowler)