打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
appWidget 简单入门学习笔记
AppWidgetConfigure

1,让桌面能够添加你的appWidget

1,一个类,和2个xml

1
2
3
4
//一个实现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中注册 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Android 妙招解决App Widget用户交互 - Android - 技术中心 -...
桌面Widget动态刷新(alarm控制)
Android 桌面组件【widget】初探
转载一份 关于appwidget 很详细
自己的AppWidget一个简单教程 - 开发 - Android - JavaEye群组
AppWidget控件入门详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服