Android桌面组件Widge开发及应用

Android桌面组件Widge开发是一种很小的应用程序,每一个Widget就是一个BroadcastReceiver,然而最重要尤其是相关注册, 下面是本次代码核心注册

</activity>

<activity android:name=".TargetActivity" android:label="TargetActivity"></activity>

<receiver android:name="AppwidgetTest">

<intent-filter>

<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

</intent-filter>

<intent-filter>

<action android:name="zzy.appwidget03.UPDATE_APP_WIDGET" />

</intent-filter>

<meta-data android:name="android.appwidget.provider"

android:resource="@xml/appwidget_info" />

</receiver>

</application>

注册其中 metadata来描述Widget的细节,appwidget_info是我门要要编写描述Widget下面将会提到解释TargetActivity使我新建的一个Activity 用来当我点击桌面widget中的Button时跳转的页面的Activity 其余 的都是必不可少的申明!

首先 现在新建一个XMl包在Layout中,里面添加一个XMl文件 appwidget_info文件用来设置桌面上的widget里面的内容设置桌面组件的属性:

<?xml version="1.0" encoding="utf-8"?>

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"

android:minWidth="100dp"

android:minHeight="50dp"

android:updatePeriodMillis="86400000"

android:initialLayout="@layout/appwidget"

>

</appwidget-provider>

android:minWidthandroid:minHeightandroid:updatePeriodMillis

分别是指桌面组件的最小宽度和最小高度,最后一个表示其自动更新的时间

上面的appwidget是在layout中新建的一个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="widget test"

android:background="#000000"

/>

<ImageView

android:id="@+id/imageId"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/icon_sina"

/>

<Button

android:id="@+id/button1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="测试按钮"

/>

<Button

android:id="@+id/button2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="更换图片"

/>

</LinearLayout>

然后要建立一个widget,创建一个类,让其继承AppWidgetProvider,在AppWidgetProvider中有许多方法onUpdateonDeleteonEnabledonDisabled方法要知道这些方法 的用处:代码

public class AppwidgetTest extends AppWidgetProvider

{

private static final String UPDATE__ACTION="zzy.appwidget03.UPDATE_APP_WIDGET";

public void onReceive(Context context, Intent intent)

{

// TODO Auto-generated method stub

String action=intent.getAction();

if (action.equals(UPDATE__ACTION))

{

//先得到remoteView

RemoteViews remoteViews=new RemoteViews(context.getPackageName()

, R.layout.appwidget);

//更新图面显示

remoteViews.setImageViewResource(R.id.imageId,R.drawable.icon_twitter);

remoteViews.setTextViewText(R.id.widgetTextId, "你好");

AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);

// 得到整个widget

ComponentName componentName=new ComponentName(context,AppwidgetTest.class);

//开始更新widget

appWidgetManager.updateAppWidget(componentName, remoteViews);

}

else {

super.onReceive(context, intent);

}

}

其中这次我是通过广播机制,当我们点击下面方法中的Button(变换图片)的时候,我设置此时的按钮当以广播的形式发送,通过上面Activityreceive()方法来接受Intent类型 先得到整个Widget 然后通过updateAppWidget方法构建一个remoteVtew用来对整个组件的更新,上面的代码最终要的还有ComponentName来表示应用程序组件的名字

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds) {

Intent intent=new Intent();

Intent intent2=new Intent(context,TargetActivity.class);

intent.setAction(UPDATE__ACTION);

//设置pendingIntent 得到相关Intent信息

PendingIntent pendingIntent=PendingIntent.getBroadcast(context,-1, intent, 0);

PendingIntent pendingIntent2=PendingIntent.getActivity(context,0, intent2, 0);

//得到当前从context 得到设置的桌面组件

RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.appwidget);

//设置监听器 第一个为button1 第二个人设置调专页面的pendingIntent

remoteViews.setOnClickPendingIntent(R.id.button2, pendingIntent);

remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent2);

//更新AppWidget

//第一个参数用于指定被更新AppWidgetID

appWidgetManager.updateAppWidget(appWidgetIds,remoteViews);

System.out.println("onupdate");

super.onUpdate(context, appWidgetManager, appWidgetIds);

}

@Override

public void onDeleted(Context context, int[] appWidgetIds) {

System.out.println("onDeleted");

super.onDeleted(context, appWidgetIds);

}

@Override

public void onDisabled(Context context) {

System.out.println("onDisabled");

super.onDisabled(context);

}

@Override

public void onEnabled(Context context) {

System.out.println("onEnabled");

super.onEnabled(context);

}

}

上面的代码是AppWidget组基本的应用 也是我们必须掌握的内容,定义俩个按钮,分别对俩个按钮设置俩个Intent,然后是PendingIntent的应用,个人感觉这个PendingIntent的应用就像是对Intent的包裹一样,当我们用到的时候再将其拿出来应用,俩个PendingIntent分别对应着俩个不同ActionRemoteViews被包装成一个layout和一些特定的内容发送并显示到桌面上。

最后,整体感觉AppWidget 用处就是像那个播放歌曲的后台显示信息或者是日历事件一类,然后自己可以对拖到桌面上显示的那个进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值