appwidgetProviedr
来源:互联网 发布:淘宝十大恶心模特 编辑:程序博客网 时间:2024/06/06 03:24
一种桌面小工具的广播类。
package com.itest.testappwidget;import android.annotation.TargetApi;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.os.Build;import android.os.Bundle;import android.util.Log;import android.widget.RemoteViews;@TargetApi(Build.VERSION_CODES.JELLY_BEAN)public class AppwidgetMainActivity extends AppWidgetProvider {private final String ACTION = "com.itest.testappwidget.get";private final String TAG = "AppwidgetMainActivity";// private RemoteViews mRemoteViews = null;// private ComponentName mComponentName = null;// private AppWidgetManager mAppWidgetManager = null;private static int count = 0;// private int upcount = 0;@Overridepublic void onAppWidgetOptionsChanged(Context context,AppWidgetManager appWidgetManager, int appWidgetId,Bundle newOptions) {Log.i(TAG, "onAppWidgetOptionsChanged");super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId,newOptions);}@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {Log.i(TAG, "onDeleted");super.onDeleted(context, appWidgetIds);}@Overridepublic void onDisabled(Context context) {Log.i(TAG, "onDisabled");super.onDisabled(context);}@Overridepublic void onEnabled(Context context) {Log.i(TAG, "onEnabled");super.onEnabled(context);}@Overridepublic void onReceive(Context context, Intent intent) {Log.i(TAG, "onReceive intent=" + intent.getAction());if (intent.getAction().equals(ACTION)) {Log.i(TAG, "onReceive=" + ACTION);AppWidgetManager mAppWidgetManager = AppWidgetManager.getInstance(context);RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_appwidget_main);PendingIntent pendingintent = PendingIntent.getBroadcast(context,0, intent, 0);mRemoteViews.setOnClickPendingIntent(R.id.text, pendingintent);ComponentName mComponentName = new ComponentName(context,AppwidgetMainActivity.class);count++;mRemoteViews.setTextViewText(R.id.text, "click count=" + count);mAppWidgetManager.updateAppWidget(mComponentName, mRemoteViews);}super.onReceive(context, intent);}@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {Log.i(TAG, "onUpdate");Intent intent = new Intent();intent.setAction(ACTION);PendingIntent pendingintent = PendingIntent.getBroadcast(context, 0,intent, 0);RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(),R.layout.activity_appwidget_main);mRemoteViews.setOnClickPendingIntent(R.id.text, pendingintent);ComponentName mComponentName = new ComponentName(context,AppwidgetMainActivity.class);AppWidgetManager mAppWidgetManager = AppWidgetManager.getInstance(context);mAppWidgetManager.updateAppWidget(mComponentName, mRemoteViews);super.onUpdate(context, appWidgetManager, appWidgetIds);}}
注意:
1.在放置新的widget时调用onUpdate();
2.在调用onUpdate、onDisabled、onDeleted、onEnabled方法之前都会先调用 onReceive(Context context, Intent intent),并且在intent带有Action参数,
如:android.appwidget.action.APPWIDGET_ENABLED
android.appwidget.action.APPWIDGET_UPDATE
android.appwidget.action.APPWIDGET_DELETED
android.appwidget.action.APPWIDGET_DISABLED。
PS: onReceive()中通过 super.onReceive(context, intent); 跳转到对应的回调方法。
3.appwidgetProvider的内部数据成员在每次调用的时候都会进行重新初始化,除了static成员以外,其他成员无法保留数据。
4.一般在需要刷新界面的时候重新实例化 ComponentName和RemoteViews组件,并设置好RemoteViews界面,通过mAppWidgetManager.updateAppWidget(mComponentName, mRemoteViews);提交更新UI信息。
代码:
AppWidgetManager mAppWidgetManager = AppWidgetManager.getInstance(context);RemoteViews mRemoteViews = new RemoteViews(context.getPackageName(), R.layout.activity_appwidget_main);PendingIntent pendingintent = PendingIntent.getBroadcast(context,0, intent, 0);mRemoteViews.setOnClickPendingIntent(R.id.text, pendingintent);ComponentName mComponentName = new ComponentName(context,AppwidgetMainActivity.class);mAppWidgetManager.updateAppWidget(mComponentName, mRemoteViews);
5.需要在manifest注册广播和appwidget的xml meta-data:
其中 <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget"/>中的android:name="android.appwidget.provider" 为系统指定的。
代码:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itest.testappwidget" android:versionCode="1" android:versionName="1.0" > <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name="AppwidgetMainActivity"><intent-filter> <action android:name="com.itest.testappwidget.get"/> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget"/></receiver> </application></manifest>6.xml文件:
代码
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/activity_appwidget_main" android:minHeight="50dp" android:minWidth="50dp" android:updatePeriodMillis="10000" ></appwidget-provider>
如果要用android:updatePeriodMillis实现更新的话,频率不能超过30分钟一次的频率。
7.关于appwidget的尺寸
end.# of Cells (Columns or Rows) Available Size (dp) ( 140dp2110dp3180dp4250dp……n70 × n − 30minWidth
orminHeight
)
- appwidgetProviedr
- POJ 2352 stars【树状数组】解题报告
- hdu 1561 (树形dp)The more, The Better
- 嵌入式系统中断服务子程序(ISR)
- ubuntu系统中声卡无声音
- matlab中的contour画曲面的等高线图 和pie 饼状图 surf画三维图
- appwidgetProviedr
- Msxml2.XMLHTTP和Microsoft.XMLHTTP有什么区别?
- Java使用SWFTools转换PDF为SWF
- PLSQL常用设置
- 关于setsockopt和getsockopt函数
- IBM分析大数据在现实世界中的应用
- C++ 条件运算符 ? :求公共类型
- struts.xml文件中 result标签的 type 属性为redirectAction时URL参数与值的获得
- RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序”