Android 窗口小部件--APP Widget

今天就写写 Android 窗口小部件的用法,即App Widget.我们知道,App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget Provider来发布一个Widget。
实现App Widget主要用到的类有AppWidgetProvider 它继承自BroadcastReceiver,它可以接受widget相关的广播,例如 widget 的更新、删除、开启和禁用等。接下来,给大家说说实现步骤:
1、在资源文件夹res/layout中创建widget的布局文件,我创建的是widget.xml文件,如下:
    <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/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="时间显示"
        />
</LinearLayout>

2、在res文件夹中创建xml文件夹,并且在xml文件夹中创建widgetconfig.xml文件,为widget的配置文件,如下:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/widget"
    android:minHeight="30dp"
    android:minWidth="60dp"
    android:updatePeriodMillis="864000" >
</appwidget-provider>

3、创建TimerService继承自Service,其中实现onCreate(),onDestroy()方法。在onCreate方法中设置定时任务,使每隔一秒widget进行更新。
代码如下:

public class TimerService extends Service {
    private Timer timer;
    private SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                updateViews();  
            }
        }, 0, 1000);//设置为每隔1秒更新
    }
    /**
     * 更新
     */
    private void updateViews(){
        String time=dateFormat.format(new Date());
        RemoteViews rv=new RemoteViews(getPackageName(), R.layout.widget);
        rv.setTextViewText(R.id.tv, time);
        AppWidgetManager manager=AppWidgetManager.getInstance(getApplicationContext());
        ComponentName cn=new ComponentName(getApplicationContext(), WidgetProvider.class);
        manager.updateAppWidget(cn, rv);

    }
    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        timer=null;
    }

4、创建WidgetProvider继承自AppWidgetProvider,重写方法,其中onDeleted是将widget从屏幕删除是调用,onDisabled是在最后一个widget从屏幕删除是调用,onEnabled是在第一个widget添加到屏幕是调用,onUpdate是在刷新的时候调用。我们需要在执行onEnabled方法时开启服务,在onDisabled方法执行时,停止服务。代码如下:

public class WidgetProvider extends AppWidgetProvider {
        @Override
        public void onDeleted(Context context, int[] appWidgetIds) {
            // TODO Auto-generated method stub
            super.onDeleted(context, appWidgetIds);
            //将widget从桌面删除
        }
        /**
         * 最后一个widget被从桌面删除执行
         */
        @Override
        public void onDisabled(Context context) {
        // TODO Auto-generated method stub
        super.onDisabled(context);
        context.stopService(new Intent(context,TimerService.class));
        }
        /**
         * 表示第一个widget添加到桌面上执行
         */
        @Override
        public void onEnabled(Context context) {
        // TODO Auto-generated method stub
        super.onEnabled(context);
        context.startService(new Intent(context,TimerService.class));
        }
        /**
         * 
         */
        @Override
        public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        super.onReceive(context, intent);
        }
        /**
         * 刷新的时候执行
         */
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        //remoteView和AppWidgetManager

        }

}   

5、我们需要在定义文件中定义我们的WidgetProvider和TimerService,代码如下:

   <receiver android:name="com.example.mywidght.WidgetProvider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/widghtconfig" />
        </receiver>

        <service android:name="com.example.mywidght.TimerService" >
        </service>

当你做了以上步骤,就可以运行你的程序了,我贴的代码是我做的一个桌面的时间插件。如果觉得有用请点赞,谢谢。如果有疑问,可加群137149792讨论,共同进步。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值