appWidget 简单入门学习笔记
2011-09-24 15:19
323 查看
1,让桌面能够添加你的appWidget
1,一个类,和2个xml
//一个实现AppWidgetProvider的类 public class TomAppWidgetProvider extends AppWidgetProvider { }
<!--放在 res/xml 文件夹中命名为tom_appwidget_info.xml--> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:initialLayout="@layout/tom_appwidget" android:configure="kg.tom.AppWidgetConfigure" > </appwidget-provider> <!-- android:initialLayout: 初始化你的appWidget布局 -->
<!--放置在res/layout/tom_appwidget_provider.xml--> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="294dp" android:layout_height="72dp" android:orientation="vertical" > <TextView android:id="@+id/appwidget_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ff000000"/> <Button android:id="@+id/appwidget_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@android:string/ok" /> </LinearLayout>
在AndroidManifest.xml中声明你的appWidget
<receiver android:name="TomAppWidgetProvider" > <intent-filter> <!--让系统能够设别到你的appWidgetProvider的动作--> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <!--设置你的appWidget的布局--> <meta-data android:name="android.appwidget.provider" android:resource="@xml/tom_appwidget_info" /> </receiver>
长按你的Home 界面,你就会看到你的widget已经在列表当中
但是,现在点击是会出错的,这时候我们需要设置我们的AppWidgetConfigure
在activity中增加一个Intent-filter
<intent-filter> <!-- 让系统能够设别到你的appWidgetProvider的动作 --> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter>
public class AppWidgetConfigure extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置widgetId int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; //1,将setResult 设置为 取消,用于取消widget host setResult(RESULT_CANCELED); //2,从Intent 中找到widget 的id Intent intent = getIntent(); Bundle extras = intent.getExtras(); if(extras != null){ mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID); } //3,如果获取不到 appWidget id 我们就结束 if(mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID){ Log.d("app", "获取失败退出!!!"); finish(); } final Context context = AppWidgetConfigure.this; //4,实例化你的 appWidget AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); //5,更新widget Intent resultValue = new Intent(); resultValue.putExtra(appWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish(); } }
2,然后写provider的代码
public class TomAppWidgetProvider extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // TODO Auto-generated method stub super.onUpdate(context, appWidgetManager, appWidgetIds); final int N = appWidgetIds.length; Log.d("app", "onUpdate--->Ids==="+String.valueOf(N) ); for(int i=0; i < N; i++){ int appWidgetId = appWidgetIds[i]; updateAppWidget(context, appWidgetManager, appWidgetId); } } static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId){ Log.d("app", "update---->id" + appWidgetId); //1,widget中的的标题 CharSequence text = "这是我第一个widget"; //2,widget显示用布局,并设置text显示的值 RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.tom_appwidget_provider); views.setTextViewText(R.id.appwidget_text, text); //3,通知widget manager 更新 appWidgetManager.updateAppWidget(appWidgetId, views); } @Override public void onDeleted(Context context, int[] appWidgetIds) { // TODO Auto-generated method stub super.onDeleted(context, appWidgetIds); //删除的时候调用的方法 int appids = appWidgetIds.length; Log.d("app", "onDelete--->" + appids); } }
然后就可以运行了:
顺便附上一张简单原理图:..
2,小小的进阶为widget实现运行activity
只要在加上几行代码的appwidget 就能实现挑战到Activity的功能1,新建一个HelloAppWidget的activity
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,int appWidgetId){ Log.d("app", "update---->id" + appWidgetId); //1,设置显示用标题 CharSequence text = "这是我第一个widget"; //1.1,增加跳转用activity相关 intent Intent intent = new Intent(context, HelloAppWidget.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); //2,如果,没有在xml中声明RemoteViews布局,这里就必须要让其他布局基于RemoteViews RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.tom_appwidget_provider); views.setTextViewText(R.id.appwidget_text, text); //2.1将需要跳转的intent绑定到appWidget button中 views.setOnClickPendingIntent(R.id.appwidget_button, pendingIntent); //3,通知widget manager 更新 appWidgetManager.updateAppWidget(appWidgetId, views); }
跳转到特定activity…ps:使用activity记得在AndroidManifest.xml中注册
相关文章推荐
- appWidget 简单入门学习笔记
- 大数据与Hadoop简单入门[学习笔记]
- appwidget 窗口小部件学习笔记
- 学习ServiceMix笔记(六) 学习Camel的JDBC简单入门
- Android学习指南之三十五:App Widget开发入门指导
- 【JavaEE学习笔记】Servlet_01_入门,简单的Servlet程序
- IOS学习笔记1(入门)——UI继承关系(转)、App生命周期
- App Widget -- MarsChen Android 开发教程学习笔记
- python flask 学习笔记1 简单入门
- 脚本语言Lua简单入门学习笔记
- AngularJS学习笔记一:简单入门
- MySql学习笔记(三)SQL简单入门语句--Fenby摘抄笔记
- JavaScript 简单入门学习笔记(四)
- quartz学习笔记(一)简单入门
- ROR 学习笔记系列二 基于ROR的简单Hello World程序入门
- [JAVA学习笔记-83]Ant简单入门
- Android开发学习笔记(六):最简单的办法实现APP欢迎界面
- 网易云课堂程序设计入门--C语言第一周 简单的计算程序学习笔记
- Android学习之AppWidget笔记分享
- MongoDB快速入门学习笔记2 MongoDB的概念及简单操作