zoukankan      html  css  js  c++  java
  • Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是不可缺少的!

    Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是不可缺少的!


    PS:学习自某站点(不打广告)
    这个小组件相信大家都非常熟悉吧,曾经的墨迹天气的时候我也经经常使用,如今好像非常少有软件用了,个人感觉吧…他对于一个用户而言来说是十分方便。快捷的,并且我们能够定制一些各种各样的开关等等等等….
    我们新建一个project——Widget

    这里写图片描写叙述
    >

    一.开发步骤

    • 1.绘制Widget布局(比較局限性的View)
    • 2.配置Widget的属性
    • 3.自己定义APPwidgetProvicer
    • 4.提供Configuration Activity(配置Activity)

    二.实现桌面时钟

    需求:

    • 1.实时更新时间
    • 2.加入。删除

    1.appwidget-provider

    既然我们要使用它。我们就先在res文件夹下新建一个xml文件夹。然后再new一个appwidget-provider,再新建一个layout名叫widget_clock.xml等下我们调用

    这里写图片描写叙述

    <?

    xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:initialLayout="@layout/widget_clock" android:minHeight="40dp" android:minWidth="100dp" android:updatePeriodMillis="8640000" > </appwidget-provider>

    再新建一个layout。名为widget_clock.xml就是我们widget小组件的布局了,由于我们仅仅要一个时钟。所以,就仅仅写个TextView就OK了,ID是tv_clock;

    2.ClockProvider

    主要是监听小组件的状态

    package com.lgl.widget;
    
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.content.Intent;
    
    /**
     * 时钟小组件的监听
     * 
     * @author lgl
     * 
     */
    public class ClockProvider extends AppWidgetProvider {
    
        // 刷新的时候运行
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                int[] appWidgetIds) {
            // TODO Auto-generated method stub
            super.onUpdate(context, appWidgetManager, appWidgetIds);
        }
    
        // 第一个加入到屏幕上
        @Override
        public void onEnabled(Context context) {
            // TODO Auto-generated method stub
            super.onEnabled(context);
            // 启动Service
            context.startService(new Intent(context, ClockService.class));
        }
    
        // 最后一个widget从屏幕移除
        @Override
        public void onDisabled(Context context) {
            // TODO Auto-generated method stub
            super.onDisabled(context);
            context.stopService(new Intent(context, ClockService.class));
        }
    
        // 从屏幕移除
        @Override
        public void onDeleted(Context context, int[] appWidgetIds) {
            // TODO Auto-generated method stub
            super.onDeleted(context, appWidgetIds);
        }
    }
    

    3.ClockService

    当我们把小组件加入到我们的屏幕上的时候,我们就启动这个服务去更新时间

    package com.lgl.widget;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    import android.app.Service;
    import android.appwidget.AppWidgetManager;
    import android.content.ComponentName;
    import android.content.Intent;
    import android.os.IBinder;
    import android.widget.RemoteViews;
    
    /**
     * 更新小组件事件的服务
     * 
     * @author lgl
     * 
     */
    public class ClockService extends Service {
    
        // 定时器
        private Timer timer;
        // 日期格式
        private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        @Override
        public IBinder onBind(Intent intent) {
    
            return null;
        }
    
        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
            timer = new Timer();
            /**
             * 參数:1.事件2.延时事件3.运行间隔事件
             */
            timer.schedule(new TimerTask() {
    
                @Override
                public void run() {
                    updateView();
                }
            }, 0, 1000);
        }
    
        /**
         * 更新事件的方法
         */
        private void updateView() {
            // 时间
            String time = sdf.format(new Date());
            /**
             * 參数:1.包名2.小组件布局
             */
            RemoteViews rViews = new RemoteViews(getPackageName(),
                    R.layout.widget_clock);
            // 显示当前事件
            rViews.setTextViewText(R.id.tv_clock, time);
    
            // 刷新
            AppWidgetManager manager = AppWidgetManager
                    .getInstance(getApplicationContext());
            ComponentName cName = new ComponentName(getApplicationContext(),
                    ClockProvider.class);
            manager.updateAppWidget(cName, rViews);
        }
    
        @Override
        public void onDestroy() {
            // TODO Auto-generated method stub
            super.onDestroy();
            timer = null;
        }
    
    }
    

    我们的服务写好了之后我们就能够去监听了,当我们创建了小组件的时候就启动服务,当我们移除了小组件的时候就停止服务

    // 第一个加入到屏幕上
        @Override
        public void onEnabled(Context context) {
            // TODO Auto-generated method stub
            super.onEnabled(context);
            //启动Service
            context.startService(new Intent(context,ClockService.class));
        }
    
        // 最后一个widget从屏幕移除
        @Override
        public void onDisabled(Context context) {
            // TODO Auto-generated method stub
            super.onDisabled(context);
            context.stopService(new Intent(context,ClockService.class));
        }

    可是别忘了,我们还须要在AndroidMainifest.xml中注冊一下

     <receiver android:name="com.lgl.widget.ClockProvider" >
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
    
               <meta-data
                   android:name="android.appwidget.provider"
                   android:resource="@xml/widgetconfig" />
    
            </receiver>
    
            <service android:name="com.lgl.widget.ClockService" >
            </service>

    好了我们运行一下

    这里写图片描写叙述

    Demo下载:http://download.csdn.net/detail/qq_26787115/9437254

  • 相关阅读:
    join命令
    参与者模式
    字符串中的第一个唯一字符
    Git与SVN对比
    惰性模式
    .NET Conf 2020
    使用Github部署Azure应用服务
    Azure Terraform(一)入门简介
    打日志还能打出个线上Bug_ 太难了。。。
    让API并行调用变得如丝般顺滑的绝招
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7105073.html
Copyright © 2011-2022 走看看