展会信息港展会大全

android widget 桌面插件的简单事例讲解
来源:互联网   发布日期:2015-10-03 10:41:43   浏览:2067次  

导读: 想要做个可以在桌面上显示的插件需要3个步骤: 1. 继承AppWidgetProvider 2. 编写widget的界面xml, 编写mywidget属性xml 3. Andr...

想要做个可以在桌面上显示的插件需要3个步骤:

1. 继承AppWidgetProvider

2. 编写widget的界面xml, 编写mywidget属性xml

3. AndroidManifest.xml注册插件

先上图

这个案例是一个会自增的数字, 非常的简单。

1. 继承AppWidgetProvider

[java]

public class MyWidgetProvider extends AppWidgetProvider

{

private static Timer myTimer;

private static int index = 0;

private final String broadCastString = "knowheart.wd.appWidgetUpdate";

@Override

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

{

// TODO Auto-generated method stub

super.onDeleted(context, appWidgetIds);

}

@Override

public void onEnabled(Context context)

{

// TODO Auto-generated method stub

super.onEnabled(context);

}

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds)

{

// TODO Auto-generated method stub

super.onUpdate(context, appWidgetManager, appWidgetIds);

}

@Override

public void onReceive(Context context, Intent intent)

{

super.onReceive(context, intent);

}

}

首先我们添加一个类, 用于继承AppWidgetProvider, 它就是用来控制我们的插件更新删除的一些操作

这里会用到onEnabled、onUpdate、onReceive三个方法

2. 编写widget的界面xml, 编写mywidget属性xml

layout/widget_layout.xml

[html]

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:background="#000000"

android:layout_gravity="center_horizontal"

android:layout_width="300dp"

android:layout_height="wrap_content">

<TextView

android:id="@+id/update"

android:text="0"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

/>

</LinearLayout>

新建一个文件夹命名xml, 再添加一个xml文件

xml/mywidget.xml

[html]

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

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

android:minWidth="300dip" android:minHeight="72dp"

android:updatePeriodMillis="86400000"

android:initialLayout="@layout/widget_layout"

>

</appwidget-provider>

这里设置插件的长宽、刷新时间, 0为手动刷新、以及插件的界面xml

3. AndroidManifest.xml注册插件

[html]

<!-- 注册该插件 -->

<receiver android:name="MyWidgetProvider" >

<intent-filter >

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

<action android:name="com.wd.appWidgetUpdate" >

</action>

</intent-filter>

<meta-data

android:name="android.appwidget.provider"

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

</receiver>

<action android:name="com.wd.appWidgetUpdate" >这一段是向系统注册一个广播, 我们会在逻辑处理时将该广播发送给AppWidgetProvider的更新方法, 以实现手动刷新。

那么完成上面三部基本上就可以显示一个插件在桌面上了。

如果我们想让插件显示的数字每秒加一的话, 我们需要做后台处理

[java]

public class MyWidgetProvider extends AppWidgetProvider

{

private static Timer myTimer;

private static int index = 0;

//定义我们要发送的事件

private final String broadCastString = "com.wd.appWidgetUpdate";

@Override

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

{

// TODO Auto-generated method stub

super.onDeleted(context, appWidgetIds);

System.out.println("onDeleted");

}

@Override

public void onEnabled(Context context)

{

System.out.println("onEnabled");

// TODO Auto-generated method stub

super.onEnabled(context);

//在插件被创建的时候这里会被调用, 所以我们在这里开启一个timer 每秒执行一次

MyTask mMyTask = new MyTask(context);

myTimer = new Timer();

myTimer.schedule(mMyTask, 1000, 1000);

System.out.println("onEnabled2");

}

@Override

public void onUpdate(Context context, AppWidgetManager appWidgetManager,

int[] appWidgetIds)

{

System.out.println("onUpdate");

// TODO Auto-generated method stub

super.onUpdate(context, appWidgetManager, appWidgetIds);

}

@Override

public void onReceive(Context context, Intent intent)

{

//当判断到是该事件发过来时, 我们就获取插件的界面, 然后将index自加后传入到textview中

System.out.println("onReceive");

if(intent.getAction().equals(broadCastString))

{

index++;

RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

rv.setTextViewText(R.id.update, Integer.toString(index));

//将该界面显示到插件中

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

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

appWidgetManager.updateAppWidget(componentName, rv);

}

// TODO Auto-generated method stub

super.onReceive(context, intent);

}

class MyTask extends TimerTask

{

private Context mcontext = null;

private Intent intent = null;

public MyTask(Context context) {

//新建一个要发送的Intent

mcontext = context;

intent = new Intent();

intent.setAction(broadCastString);

}

@Override

public void run()

{

System.out.println("2");

//发送广播(由onReceive来接收)

mcontext.sendBroadcast(intent);

}

}

}

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港