Android 桌面小窗口开发

布局layout : widget_home.xml

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

            android:id="@+id/widget_time"
        android:layout_width="match_parent"
        android:layout_height="65dp"
        android:layout_alignParentTop="true"
        android:padding="5dp">

                    android:id="@+id/widget_date"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="15dp"
            android:textColor="#ff4a4a4a"
            android:textSize="36sp"
            android:text="4月5号" />

                    android:id="@+id/widget_week"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_toRightOf="@+id/widget_date"
            android:text="周三下午"
            android:textColor="#ff4a4a4a"
            android:textSize="15sp"
            android:layout_marginLeft="10dp" />

                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_marginRight="15dp"
            android:orientation="vertical"
            android:gravity="center">

                            android:id="@+id/weather_image"
                android:layout_width="36dp"
                android:layout_height="36dp" />

                            android:id="@+id/weather_txt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="雷阵雨"
                android:textColor="#ff4a4a4a"
                android:textSize="12sp"/>
        
    

            android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:layout_marginBottom="15dp">

                    android:id="@+id/company_rank"
            android:layout_width="126dp"
            android:layout_height="112dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="10dp"
            android:background="@drawable/widget_item_bg_fillet">

                            android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/company_rank_number"
                android:layout_marginBottom="10dp"
                android:layout_centerHorizontal="true"
                android:text="通话时长"
                android:textSize="12sp"
                android:textColor="#9B9B9B"/>

                            android:id="@+id/company_rank_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="3"
                android:textColor="#4A4A4A"
                android:textSize="32sp" />

                            android:id="@+id/company_rank_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/company_rank_number"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:text="公司排名"
                android:textColor="#606266"
                android:textSize="14sp" />
        

                    android:id="@+id/branch_rank"
            android:layout_width="126dp"
            android:layout_height="112dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="10dp"
            android:background="@drawable/widget_item_bg_fillet">

                            android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/branch_rank_number"
                android:layout_marginBottom="10dp"
                android:layout_centerHorizontal="true"
                android:text="通话时长"
                android:textSize="12sp"
                android:textColor="#9B9B9B"/>

                            android:id="@+id/branch_rank_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="1"
                android:textColor="#4A4A4A"
                android:textSize="32sp" />

                            android:id="@+id/branch_rank_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/branch_rank_number"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:text="部门排名"
                android:textColor="#606266" />
        

                    android:id="@+id/call_customer"
            android:layout_width="126dp"
            android:layout_height="112dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:background="@drawable/widget_item_bg_fillet">

                            android:id="@+id/call_customer_path"
                android:layout_width="12dp"
                android:layout_height="7dp"
                android:layout_alignParentEnd="true"
                android:layout_alignTop="@+id/call_customer_number"
                android:layout_marginEnd="23dp"
                android:src="@drawable/down" />

                            android:id="@+id/call_customer_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="289"
                android:textColor="#4A4A4A"
                android:textSize="32sp" />

                            android:id="@+id/call_customer_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/call_customer_number"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:text="拨打客户数"
                android:textColor="#606266" />
        

                    android:id="@+id/answer_customer"
            android:layout_width="126dp"
            android:layout_height="112dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dp"
            android:background="@drawable/widget_item_bg_fillet">

                            android:id="@+id/answer_customer_path"
                android:layout_width="12dp"
                android:layout_height="7dp"
                android:layout_alignParentEnd="true"
                android:layout_alignTop="@+id/answer_customer_number"
                android:layout_marginEnd="23dp"
                android:src="@drawable/up" />

                            android:id="@+id/answer_customer_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="175"
                android:textColor="#4A4A4A"
                android:textSize="32sp" />

                            android:id="@+id/answer_customer_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/answer_customer_number"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:text="接通客户数"
                android:textColor="#606266" />
        

                    android:id="@+id/intention_customer"
            android:layout_width="126dp"
            android:layout_height="112dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="10dp"
            android:background="@drawable/widget_item_bg_fillet">

                            android:id="@+id/intention_customer_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="37"
                android:textColor="#4A4A4A"
                android:textSize="32sp" />

                            android:id="@+id/intention_customer_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/intention_customer_number"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:text="有意向客户"
                android:textColor="#606266" />
        

                    android:id="@+id/exchange_customer"
            android:layout_width="126dp"
            android:layout_height="112dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_marginRight="10dp"
            android:background="@drawable/widget_item_bg_fillet">

                            android:id="@+id/exchange_customer_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:text="54"
                android:textColor="#4A4A4A"
                android:textSize="32sp" />

                            android:id="@+id/exchange_customer_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/exchange_customer_number"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="5dp"
                android:text="待沟通客户"
                android:textColor="#606266" />
        
    

 布局xml:desktop_widget.xml

xml version="1.0" encoding="utf-8"?>
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="240dp"
    android:minHeight="500dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@mipmap/ic_launcher"
    android:initialLayout="@layout/widget_home"
    android:initialKeyguardLayout="@layout/widget_home"
    android:widgetCategory="home_screen|keyguard">

    

AndroidManifest.xml 配置:

android:name=".widget.DesktopWidgetProvider" >
    
        android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        android:name="com.worken.micro.widget.UPDATE_ALL" />
        android:name="com.worken.micro.widget.WEATHER" />
    

            android:name="android.appwidget.provider"
        android:resource="@xml/desktop_widget" />

小窗口DesktopWidgetProvider.class代码:

public class DesktopWidgetProvider extends AppWidgetProvider {

    // 每次删除该类型的窗口小部件(AppWidget)时都会触发 ,同时发送ACTION_APPWIDGET_DELETED广播,
    //     该广播可被onReceive()方法接受到.
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
    }
    // 最后删除该类型的窗口小部件(AppWidget)时触发
    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        Intent startUpdateIntent = new Intent(context, UpdateWidgetService.class);
        context.startService(startUpdateIntent);
    }

    //第一次添加该类型的窗口小部件窗口小部件(AppWidget)时触发
    @Override
    public void onEnabled(Context context) {
        super.onEnabled(context);
        Intent startUpdateIntent = new Intent(context, UpdateWidgetService.class);
        context.startService(startUpdateIntent);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
        Intent startUpdateIntent = new Intent(context, UpdateWidgetService.class);
        context.startService(startUpdateIntent);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        RemoteViews remoteViews = UpdateWidgetService.updateWidgetView(context);
        int N = appWidgetIds.length;
        for(int i = 0 ; i < N ; i++){
            appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
        }
    }
}

小窗口数据刷新UpdateWidgetService.class代码:

public class UpdateWidgetService extends Service {

    private Timer timer;
    private TimerTask task;

    private static RemoteViews remoteViews = null ;

    public UpdateWidgetService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        timer = new Timer();
        task = new TimerTask() {
            @Override
            public void run() {
                ComponentName componentName = new ComponentName(UpdateWidgetService.this, DesktopWidgetProvider.class);
                RemoteViews remoteViews = updateWidgetView(getApplicationContext());
                //由AppWidgetManager处理Wiget.
                AppWidgetManager awm = AppWidgetManager.getInstance(getApplicationContext());
                awm.updateAppWidget(componentName, remoteViews);
            }
        };
        timer.schedule(task, 0, 30 * 60 * 1000);
        super.onCreate();
    }

    public static RemoteViews updateWidgetView(Context context){
        NowWeather.showWeather();
        obtainRankData(context, null);
        if(remoteViews == null) {
            //初始化remoteView对象
            remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_home);
        }
        //设置相应属性
        setTimeAttributes(remoteViews);
        setWeather(remoteViews);
        setRankData(remoteViews);
        return remoteViews ;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        timer.cancel();
        task.cancel();
        timer = null;
        task = null;
    }

期待下次更新...

你可能感兴趣的:(android开发日志)