android app widget,安卓桌面小工具的使用

App Widgets are miniature application views that can be embedded in other applications (such as the Home screen) and receive periodic updates.


 

App Widgets是一个桌面应用程序,像快捷方式一样,放在我们的桌面上,他还可以为我们提供数据的更新,在不同的时刻展示一个不同的东西。

现在有很多APP应用上面都有桌面小工具,比如说我们用的比较多的墨迹天气。每天都可以从官方同步今天的最天气情况,让使用者能够更加方便的使用我们的应用,既然可以他有这么优秀的一个特点,为什么我们不在我们自己的App中使用他呢?

 

要使用它,我们首先得知道他是怎么用的。

 

 

To create an App Widget, you need the following:
AppWidgetProviderInfo object
Describes the metadata for an App Widget, such as the App Widget's layout, update frequency, and the AppWidgetProvider class. This should be defined in XML.
AppWidgetProvider class implementation
Defines the basic methods that allow you to programmatically interface with the App Widget, based on broadcast events. Through it, you will receive broadcasts when the App Widget is updated, enabled, disabled and deleted.


 

 

官网文档上面说得很清楚,要创建一个App Widget,我们必须要做两个事情:第一,AppWidgetProvider的描述信息,比如说他的Layout。第二,就是我们自己的AppWidgetProvider的实现了,我们需要通过他才能更新我们自己的AppWidget

 

 

下面我们一起来完成一个简单的桌面应用程序。

 

(1)、我们在res目录下新建一个xml的文件目录,然后在创建一个appwidget-providerxml资源文件,这个是定义一个我们自己的appwidget-provider的相关属性。代码如下:

 

 

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/main"
    android:minHeight="72dp"
    android:minWidth="294dp"
    android:updatePeriodMillis="86400000" 
</appwidget-provider>


 

其中,initialLayout就是指定我们这个appwidget-provider所使用的布局文件。

 minHeightminWidth是指定我们这个appwidget-provider在桌面上显示的大小。

整个Screen是用的4*4的小格子,宽度的计算方法如下:

 

# of Cells
 
(Columns or Rows)

Available Size (dp)
 
(minWidth or minHeight)

1

40dp

2

110dp

3

180dp

4

250dp

n

70 × n − 30

 

 

updatePeriodMillis是指appwidget-provider的更新时间,在我的实验中,官方给了一个限制时间,就是如果你的更新时间小于一个小时,系统会限制你一个小时更新一次。

是不是想说,那显示时间那个是怎么样实现的呢?那个当然不是用的appwidget的更新了。实现的方法有很多,你可以自己去问一下谷老师嘛。

PS: updatePeriodMillis的单位是毫秒

 

有关它的更多属性,请参考官方相关文档。

 

(2)、创建一个我们自己的Provider类,实现AppWidgetProvider,并实现onUpdate方法,我们的Provider接收到一个APPWIDGET_UPDATE,会掉用onUpdate()方法,我们可以通过他来更新桌面小工具上的相关信息。

 

 

package com.example.androidwedgitprovider;

import java.util.Calendar;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.text.format.DateFormat;
import android.widget.RemoteViews;

public class MyAppWedgitProvider extends AppWidgetProvider {

	private final String TIME_REG = "kk:mm:ss";

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {

		System.out.println("on update method excute");
		super.onUpdate(context, appWidgetManager, appWidgetIds);
		int n = appWidgetIds.length;// 桌面上添加小工具的个数

		for (int i = 0; i < n; i++) {
			int appWidgetId = appWidgetIds[i];
			updateAppWidget(context, appWidgetManager, appWidgetId);
		}
	}

	private void updateAppWidget(Context context,
			AppWidgetManager appWidgetManager, int appWidgetId) {
		
		RemoteViews rv = new RemoteViews(context.getPackageName(),
				R.layout.main);
		Calendar calenter = Calendar.getInstance();
		rv.setTextViewText(R.id.show_text,
				"这次更新,将时间改为:" + DateFormat.format(TIME_REG, calenter.getTime()));
		appWidgetManager.updateAppWidget(appWidgetId, rv); //更新我们的视图
	}

}


 

 

(3)、桌面小工具的布局文件如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
	android:orientation="vertical"
	android:background="@drawable/widget_background">

    <TextView
        android:id="@+id/show_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/hello_world" 
        android:textColor="@android:color/white"/>

</LinearLayout>


 

(4)、我们还需要在Mainfest中注册我们的小工具

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidwedgitprovider"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <receiver 
            android:label="我的桌面小工具"
            android:name="com.example.androidwedgitprovider.MyAppWedgitProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/appwidget_provider" />
        </receiver>
    </application>

</manifest>


 

就这样,如果没有什么以外的话,你的桌面小工具,就可以运行起来了 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(android,布局,应用,widget)