• 016、AppWidgetProvider桌面小控件


    AppWidgetProvider对象可以实现桌面Widget
    AppWidget也有生命周期,当重写AppWidgetProvider的onUpdate()方法后,就会进入第一次AppWidget的更新周期中,然而它在AndroidManifest.xml里是定义在<receiver>TAG中,所以当手机对操作系统广播"android.appwidget.action.APPWIDGET_UPDATE"信息的同时,也会被AppWidgetProvider获取,又由于它并非服务,所以在失去焦点时,虽然依旧在后台运行,但不会进行画面的更新。一般在onUpdate方法里面在启动一个服务,再在服务里面注册希望收听的广播。
    每一个AppWidgetProvider都有更新时间设置,这个更新时间间隔一到,就会更新AppWidget的RemoteView对象,此处的时间间隔将影响电池电量的消耗速度,一般建议是一天更新一次。
    当用户删除这个AppWidget时,会调用onDeleted()方法。
     
    AndroidManifest.xml文件里面配置:
            <receiver
                android:name="com.example.ex_4_28_appwidgetprovider.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                </intent-filter>
                <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/my_widget_provider" />
            </receiver>

     

    上面文件里面引用的<meta-data>里面的android:resource="@xml/my_widget_provider",有3个属性是比较重要的:"android:minWidth"为AppWidget在手机桌面上的宽,"android:minHeight"为AppWidget在手机桌面上的高,"android:updatePeriodMillis"为AppWidget定时更新Refresh RemoteView的时间

    <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
        android:initialLayout="@layout/activity_main"
        android:minHeight="72dp"
        android:minWidth="72dp"
        android:updatePeriodMillis="6000" />

     

    如果需要在AppWidget里面添加按钮,则onUpdate()方法里面的RemoveView对象需要新增setOnClickPendingIntent()。
            for (int appWidgetId : appWidgetIds) {
                Intent configIntent = new Intent(context, MyActivity.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                        configIntent, 0);
                RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                        R.layout.activity_main);
                remoteViews.setOnClickPendingIntent(R.id.bt, pendingIntent);
                appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
            }
  • 相关阅读:
    网页设计 【0834】
    Apache Commons Lang
    Arduino U8G2 OLED_SSD1306_Chart
    Arduino Adafruit_SSD1306的使用
    proteus pro 8.9 安装及汉化教程
    AD IC类元件模型的创建
    C/C++ 深入理解char * ,char ** ,char a[ ] ,char *a[] 的区别
    Arduino MLX90614
    Arduino uno mega2560
    C语言 堆和栈
  • 原文地址:https://www.cnblogs.com/zyh-blog/p/3343634.html
Copyright © 2020-2023  润新知