AppWidget的使用

Android 之App Widget 构建应用微件 阅读详情
Appwidget就是手机应用中常常放在桌面(即home)上的一些应用程序,比如说闹钟等。这种应用程序的特点是它上面显示的内容能够根据系统内部的数据进行更新,不需要我们进入到程序的内部去,比如说闹钟指针的摆动等。本节内容就简单的介绍下实现这种功能所用到的appwidget技术,通过3个例子由浅入深来学会使用它。参考资料是mars的教程。

  实验基础:

  自己实现一个AppWidget的步骤如下:

  1. 在src目录下新建一个名为xml的文件夹,在该文件夹下新建一个xml文件,该xml文件的根标签为appwidget-provider. 该xml文件主要是对所建立的appwidget的一个属性设置,其中比较常见的属性有appwidget更新的时间,其初始的布局文件等等。

  2. 在src下的layout文件夹下新建一个xml文件夹,然后在xml文件夹新建一个布局文件,该布局文件就是第一步中需要加载的appwidget初始化时所需的布局文件,因此该xml文件的根标签为与layout有关,比如说LinearLayout类型等。

  3. 在src的包目录下新建一个java文件,该文件为实现所需建立的appwidget全部功能,其中比较重要的功能是接收广播消息来更新appwidget的内容。该java文件时一个类,继承AppWidgetProvider这个类,复写其中的onDeleted,onDisabled,onEnabled,onReceive,onUpdate等方法。其中几个方法都是与AppWidgetProvider的生命周期有关的。其中onDeleted()方法是当appwidget删除时被执行,onDisabled()是当最后一个appwidget被删除时执行,onEnabled()为当第一个appwidget被建立时执行,onReceive()为当接收到了相应的广播信息后被执行(在每次添加或者删除appwidget时都会执行,且在其它方法执行的前面该方法也会被执行,其实本质上该方法不是AppWidgetProvider这个类的生命周期函数);onUpdate()为到达了appwidget的更新时间或者一个appwidget被建立时执行。

  在android4.1模拟器中,在桌面上添加一个appwidget的方法是在WIDGETS栏目(和APPS栏目并列)中选中所需要添加的appwidget,并按住鼠标不动,一会儿会出现手机桌面空白处,放在自己想放的位置即可。在该模拟器中删除一个appwidge的方法是选中该appwidget一会儿,然后向屏幕上方拖动,屏幕上方会出现XRemove字样,放进去即可。

  appwidget中本身里面就有一个程序(有个activity),但是我们在桌面上添加一个appwidget后也相当于一个程序,这2个程序本身不是在同一个进程当中,而是在各自单独的进程中。

  例一:

  实验说明:

  这个例子实现一个最简单的appwidget,即我们的appwidget只有一个按钮,按钮上面写着“我的常用密码字样”,没有其它功能,呵呵。然后我们在appwidget的java类的程序中,每个生命周期函数都在后台打印出一句话,内容是与该生命周期函数名相对应的。

  实验结果:

  往桌面添加自己创建的一个appwidget效果如下所示:

  

  该实验室先后在桌面上放2个appwidget,然后依次删除2个appwidget,则程序后台的输出结果如下所示:

  

  实验主要代码及注释(附录有实验工程code下载链接):

  MainActivity.java不用更改任何代码,采用默认的就行了,这里就不贴出来了。

my_passward_provider.java(Appwidget功能实现):

复制代码
package com.example.appwidget1;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;

public class my_password_provider extends AppWidgetProvider {

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onDeleted()");
        super.onDeleted(context, appWidgetIds);
    }

    @Override
    public void onDisabled(Context context) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onDisabled()");
        super.onDisabled(context);
    }

    @Override
    public void onEnabled(Context context) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onEnabled()");
        super.onEnabled(context);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onReceive()");
        super.onReceive(context, intent);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onUpdate()");
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
    
}
复制代码

res/xml/my_password.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="200dp"
    android:minHeight="100dp"
    android:updatePeriodMillis="600000"
    android:initialLayout="@layout/my_password_initillayout"
    >
</appwidget-provider>
复制代码

res/layout/my_password_initilayout.xml:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_appwidget"
        />

</LinearLayout>
复制代码

  例二:

  该实验的目的主要是学会在appwidget中使用PendingIntent和RemoteViews这2个类,并最终对它们有一定的了解。

  实验说明:

  这个例子在上面的例子中多增加了一个功能,即当我们把appwidget添加到桌面上的时候(上面那个例子是个按钮),单击这个按钮,这个时候程序会从home界面跳转到其它activity界面。那么怎么实现监听appwidget上的按钮控件呢?这里实现该过程与在activity中的方法不同。在此之前,我们需要了解2个概念。

  PendingIntent:

  PendingIntent与以前我们的Intent不同,以前我们新建一个intent时,立刻就用它启动一个activity,或者启动一个service,亦或是发送一个broadcast。这里我们新建一个PendingIntent后,按照字面意思并不马上使用它,而是当我们需要使用它的时候再启动,比如说当某一事件需要响应时,我们这时候可以使用建立好了的PendingIntent了。一个PendingIntent中包含了一个intent。Mars老师把PendingIntent比作成三国中的“精囊妙计”,从下面mars老师的2张示意图中可以更深一步了解PendingIntent。

  建立PendingIntent示意图:

  

  响应PendingIntent示意图:

  

  RemoteViews:

  RemoteView代表了与调用它的那个activity不在同一个进程的view,因此叫做”远程view”。在appWidget中使用这个类就可以实现当对appwidget的那个进程进行操作时响应其它进程中的activity。而RemoteViews则表示了一系列的RemoteView。

  实验结果与例一一样,只不过是在单击appwidget上的按钮时,会自动跳转到相应的activity上。这里就不截图看效果了。

  实验主要部分及代码(附录有实验工程code下载链接):

  其它部分与例一都差不多,只不过是在appwidget生命周期的onUpdate()函数不同,下面是对应其文件的java代码:

复制代码
package com.example.appwidget1;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;

public class my_password_provider extends AppWidgetProvider {

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onDeleted()");
        super.onDeleted(context, appWidgetIds);
    }

    @Override
    public void onDisabled(Context context) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onDisabled()");
        super.onDisabled(context);
    }

    @Override
    public void onEnabled(Context context) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onEnabled()");
        super.onEnabled(context);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onReceive()");
        super.onReceive(context, intent);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
    //    System.out.println("appwidget--->onUpdate()");
        for(int i = 0; i < appWidgetIds.length; i++)
        {
            System.out.println(appWidgetIds[i]);
            //该构造函数之间把跳转的2个activity给联系起来了
            Intent intent =  new Intent(context, MyPasswordActivity.class);
            //创建一个PendingIntent
            PendingIntent pendint_intent = PendingIntent.getActivity(context, 0, intent, 0);
            //创建一个remoteview对象,第2个参数为appwidget的初始布局文件
            RemoteViews remote_views = new RemoteViews(context.getPackageName(), R.layout.my_password_initillayout);
            //为RemoteViews中的button按钮添加监听器,第二个参数为PendingIntent类型,当事件触发时才执行
            remote_views.setOnClickPendingIntent(R.id.my_password, pendint_intent);
            //更新appwidget
            appWidgetManager.updateAppWidget(appWidgetIds[i], remote_views);
        }
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
    
}
复制代码

  例三:

  实验说明:

  这个例子在例二的基础上增加一些功能,即利用appwidget的onUpdate()方法中发送广播信息,然后在onReceive()方法中来接收广播消息,从而来更改appwidget的外观,这里是更改它的图片和文本显示。

  这个例子不像上面那样采用getActivity来创建PendingI,而是采用的getBroadcast,因为这里需要的是发送广播信息,而不是跳转到另一个activity。

同样的,需要啊manifest.xml文件中队appwidget这个类来注册它的接收器,action过滤时采用的是自己定义的action,名字可以自己随便取,保证不和系统提供的action名字相同即可,该程序中采用的是"my.action.APPWIDGET_UPDATE"这个名字。

  Appwidget中有1个按钮,一个ImageView,一个TextView。程序实现的是这么一个功能:appwidget在桌面被创建时,imageview和textview都有各自的内容,当按钮按下时,这2个控件的内容都会发生变化,这种变化都是通过RemotViews的方法实现的。其中imageview是用的setImageViewResource()函数,textview是用的setTextViewText()函数。

  从上面的解释可以看到,为什么在同一个类(这里指继承AppWidgetProvide的那个类)中,从onUpdate()函数发送出去的广播能够在onReceiver()函数里接收呢?这是因为AppWidgetProvider的其它4个生命周期函数的执行都是由onReceiver分发下去的。由mars老师提供的这张示意图可以看出它们之间的关系:

  

  实验结果:

  桌面上创建appwidget时显示如下:

  

  单击按钮后,显示如下:

  

  实验主要部分代码即注释(附录有实验工程code下载链接):

AndriodManifest.xml:

复制代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.appwidget1"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".my_password_provider" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <intent-filter>
                <action android:name="my.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data
                android:name="android.appwidget.provider"
                android:resource="@xml/my_password" />
        </receiver>
        <activity
            android:name=".MyPasswordActivity"
            android:label="@string/title_activity_my_password" >
        </activity>
    </application>

</manifest>
复制代码

my_password_provider.java(里面有appwidget的生命周期函数):

复制代码
package com.example.appwidget1;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.widget.RemoteViews;

public class my_password_provider extends AppWidgetProvider {
    
    private static final String MY_ACTION = "my.action.APPWIDGET_UPDATE";
    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onDeleted()");
        super.onDeleted(context, appWidgetIds);
    }

    @Override
    public void onDisabled(Context context) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onDisabled()");
        super.onDisabled(context);
    }

    @Override
    public void onEnabled(Context context) {
        // TODO Auto-generated method stub
        System.out.println("appwidget--->onEnabled()");
        super.onEnabled(context);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(MY_ACTION.equals(action))
        {
            RemoteViews remote_views = new RemoteViews(context.getPackageName(), R.layout.my_password_initillayout);
            //更改appwidget界面中的图片
            remote_views.setImageViewResource(R.id.my_image, R.drawable.no);
            //更改appwidget界面中textview中的文字内容
            remote_views.setTextViewText(R.id.my_text, "no");
            remote_views.setTextColor(R.id.my_text, Color.RED);
            //获得本context的AppWidgetManager
            AppWidgetManager appwidget_manager = AppWidgetManager.getInstance(context);
            //新建一个ComponentName,该ComponentName指的是针对appwidget整体而言的;而RemoteViews是针对appwidget
            //中各个部件之和而言的,这两者有些区别
            ComponentName component_name = new ComponentName(context, my_password_provider.class);
            //上面2句代码是为下面更新appwidget做准备的
            appwidget_manager.updateAppWidget(component_name, remote_views);        
        }
        else
            super.onReceive(context, intent);
    }

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        // TODO Auto-generated method stub
        Intent intent = new Intent();
        intent.setAction(MY_ACTION);
        //以发送广播消息的方式创建PendingIntent.
        PendingIntent pending_intent = PendingIntent.getBroadcast(context, 0, intent, 0);
        //创建一个remoteviews,其布局文件为appwidget的初始布局文件
        RemoteViews remote_views = new RemoteViews(context.getPackageName(), R.layout.my_password_initillayout);
        //为按钮添加监听器
        remote_views.setOnClickPendingIntent(R.id.my_password, pending_intent);
        //更新appwidget
        appWidgetManager.updateAppWidget(appWidgetIds, remote_views);
        
        super.onUpdate(context, appWidgetManager, appWidgetIds);
    }
    
}
复制代码

res/layout/my_password_initillayout.xml(appwidget的布局文件):

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/my_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_appwidget" />

    <ImageView
        android:id="@+id/my_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dip"
        android:src="@drawable/yes"
         />
    <TextView
        android:id="@+id/my_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/yes"
        android:textColor="#0000ff"
        />

</LinearLayout>
复制代码

Res/xml/my_password.xml(appwidget的属性设置xml文件):

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/my_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_appwidget" />

    <ImageView
        android:id="@+id/my_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dip"
        android:src="@drawable/yes"
         />
    <TextView
        android:id="@+id/my_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/yes"
        android:textColor="#0000ff"
        />

</LinearLayout>
复制代码

  总结:通过这几个例子,可以初步了解创建一个appwidget的整个流程,并且学会了简单的是appwidget和其它的进程间进行通信。

参考资料:

http://www.mars-droid.com/bbs/forum.php

Tomcat源码:Acceptor与Poller、PollerEvent 前文中我们介绍到NioEndpoint的start方法启动了Acceptor与Poller这两个异步线程来处理连接请求,本文我们就来接着介绍这两个组件。目录前言一、Acceptor1、构造方法2、run方法LimitLatchNioChannel二、Poller与PollerEvent2、pollerregisterruneventsprocessKey。 阅读详情

相关推荐

银河麒麟v10-arm SEALOS离线部署k8s集群(v1.22.8)

示例 如果你想保存一个名为 "my_snapshot" 的 etcd 快照到指定的对象路径你可以使用以下命令: sealos etcd save --backupPath /root --name my_snapshot 如果文件名带时间戳:my_snapshot$(date +"%Y%m%d_%H%M%S") 会生成一个形如 20230913_143045 的时间戳。--restorePath string:指定快照恢复目录(默认为 "/opt/sealos/etcd-restore")。

xjudt的博客 3284

在Android中的widge组件是什么?

Android Widget 是一种轻量级的小部件,可以直接在主屏幕上显示实时数据,提供简单交互。它们主要用于展示简单信息或快捷功能,帮助用户更快、更方便地与应用交互。

LLZjiayou的博客 2215

车间数据孤岛终于破了!C#上位机+MQTT打通产线与MES,数据延迟从小时级降到秒级

本文针对工业上位机开发中常见的车间数据与企业管理系统(MES)割裂问题,提出基于C#和MQTT协议的完整解决方案。通过EMQX MQTT Broker实现数据实时双向传输,将质量追溯时间从2小时缩短至10秒,生产计划自动下发,实现秒级数据延迟。方案采用分层解耦架构,支持设备更换和系统升级,核心优势包括低延迟、高可靠性和易扩展性。文章详细介绍了MQTT协议选型理由、整体架构设计、技术选型(EMQX Broker和MqttNet客户端),并提供了C#实现代码和部署流程。该方案已在实际产线验证,可有效解决&quo

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 479

安卓程序开发——widget组件开发Widget就是可以放在桌面上的组件,包括像天气、便签、等。AppWidget 框架类练习Widget组件的基础应用、widget的配置、widget与服务结合实现

掌握Android widget组件的应用,练习Widget组件的基础应用、widget的配置、widget与服务结合实现时间倒计时。

WZY22502701的博客 3620

PostgreSQL核心原理:数据库崩溃恢复的唯一真相详解

PostgreSQL崩溃恢复机制通过WAL日志确保数据一致性和持久性。核心流程包括:触发恢复(非正常关闭时)、读取控制文件获取检查点LSN、顺序扫描WAL日志进行Redo阶段重做已提交事务、利用MVCC标记未提交事务为ABORTED实现逻辑撤销,最后执行检查点完成恢复。该机制依赖WAL原子性、检查点锚点和无Undo的可见性模型三大支柱,保证即使系统崩溃也能恢复到逻辑一致状态。关键设计包括延迟写入、LSN顺序控制和FPW防部分写,最终通过确定性重放实现ACID特性。

数据知道的博客 2656

【一看就会】Autoware.universe中静态绕障路线的生成逻辑

在路径行为规划中,前期根据地图和起点终点,生成了一组连续可行的路径段序列(lanelets),然后后续路径行为规划,又会进行起始点,终止点,避障绕障路径的路径规划,并且会调用route_handler中的函数,进行中心线生成,最后生成路径,后续再给速度行为规划进行速度规划。在autoware.universe的规划中,是基于规则的规划,而其中的规则又是为了解决不同场景的。而这些场景,大部分是为了解决路上障碍物(静态、动态、行人、车辆等等)。

weixin_48386130的博客 320

Android 之窗口小部件详解--App Widget

1 App Widget简介 App Widget是应用程序窗口小部件(Widget)是微型的应用程序视图,它可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新。你可以通过一个App Widget Provider来发布一个Widget。 本文参考Android官方文本,先介绍App Widget的主要组件,然后再以示例来详细说明。 2 App Widget主要的相关类介绍 2.1 AppWidgetProvider AppWidgetProvider继承自 BroadcastRe.

飞翔的熊blabla 5951

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 160

Android Studio 实现桌面小组件(APPWidget)

Android studio微件

qq_52631411的博客 1956

从 ST22 到根因定位:ABAP Dumps 全景排查指南(含典型 Dump 案例、修复套路与云时代实践)

本文系统介绍了SAP系统中ABAP短转储(Dump)的分析方法。首先指出短转储是程序运行时无法处理的错误导致系统强制终止执行。文章详细解析了短转储报告各区块的作用:从概述性的Short Text和What happened,到核心的Error Analysis和Source Code Extract,再到关键的系统字段Contents of system fields和调用栈Active Calls/Events。针对不同场景提供了排查建议:客户代码应建立可控边界,标准对象优先查阅SAP Notes。最后推

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 480

全栈拆解华为乾崑 ADS 5:WEWA2.0智能体架构与安全风险场技术、实现多传感器全融合感知与主动安全预判、助力城市NOA/高速领航/全场景无人通行极致落地

华为乾崑ADS 5的核心颠覆性,不在于单一功能的小幅升级,而在于实现了自动驾驶从“工具式辅助驾驶”到“拟人化智能体驾驶”的全栈范式革命。通过WEWA 2.0端云协同AI智能体架构,解决了传统智驾决策僵硬、博弈能力弱、学习效率低的行业痛点;通过行业首发安全风险场技术,将自动驾驶安全体系从被动避险升级为主动预判,直接减半行车风险;通过乾崑OS专属车规系统底座,保障高阶智驾的低时延、高稳定、高可靠运行;通过多传感器超融合感知体系,实现全场景、全天候、无盲区的精细化环境理解。

getusushu的博客 287

Android 之 AppWidget

之前在项目上碰到了一个问题:刚开机的时候点击主屏幕的全局搜索框没反应,需要等几十秒之后才会正常反应。 刚开始猜测是在等待什么初始化条件,但从应用栏里启动全局搜索却很快,因此可以排除这种情况,于是打算从源码层去看看。 在launcher里并未找到这个全局搜索的相关代码,因此怀疑这是一个AppWidget,在android代码中全局搜索“android.appwidget.action.AP...

不定时记录分享一些有用没用的东西 775

[Unity开发] [PICO]避坑指南:PICO商店上传APP时PXR Platform APPID设定详解

PICO开发者上传Unity应用时常见的"APPID不符"问题,主要源于混淆了开发者后台两个不同位置的APPID。

每日出拳老爷子的博客 552

Android AppWidget分析

Android AppWidget分析

空间维度的博客 1196

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android中Appwidget的使用

我们常见的桌面小插件,例如一个桌面上系统setgings开关组合,可以控制蓝牙,wifi是否开启,例如一个桌面的小天气等等;这些都是Appwidget的使用例子。 下面介绍如何使用Appwidget; 在使用的过程中涉及到一些关键类,下面一一列举: 1.AppWidget provider: 该类是BroadcastReceiver的子类,里面的onReceive方法里实现了对几个常用的a

ThinkDo的博客 7712

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

AppWidget

1.创建一个app widget需要 AppWidgetProviderInfo object: 用于描述AppWidget的元数据,比如AppWidget的layout,更新频率,AppWidgetProvider等。 AppWidgetProvider class implementation: 基于broadcaster event定义一些程序员可以和AppWidget交互的基本方法,当

778

Android:AppWidget之桌面小电筒

安卓开发中很多控件都是Widget类的,但是我们常说的Widget指的是AppWidget,即一些可以放置在桌面的小部件。     下面用两个实例来说一下这个AppWidget怎么来用。 实例一:AppWidget的基本使用 ①创建一个AppWidget的布局文件appwidget_layout.xml <LinearLayout xmlns:android="http://schema

leelit笔记本 1642

android appwidget 空间动画,最小的Android小部件,APPWIDGET_DELETED和APPWIDGET...

我遇到的问题与之前提出的问题非常相似,但不完全相同.参考:1,2,3,4我已经编写了一个最小的Android小部件,并且APPWIDGET_DELETED和APPWIDGET_DISABLED从未收到.在上面的参考文献1和2中,提出的解决方案是实现onReceive并明确查找这些意图.但是,尽管APPWIDGET_UPDATE和APPWIDGET_ENABLED出现在预期的日志中,但是我在onRe...

weixin_39564524的博客 293

开发 AppWidget

参考 https://www.cnblogs.com/joy99/p/6346829.html。

刘之帅 935

为AppWidget添加配置Activity

文章目录前言 前言     在构建自己的窗口小部件的时候,为了更加定制化,会根据用户的喜好,让用户选择小部件的样式等,这种情况下,就需要为窗口小部件添加一个配置页面了。在用户添加窗口小部件的时候,会弹出配置页面 关于构建AppWidget相关内容参考:为你的Android应用构建窗口小部件(App Widget) ...

yingaizhu的博客 811

android中appwidget的resizemode属性,Android开发入门之Appwidget用法分析

本文实例讲述了Android Appwidget用法。分享给大家供大家参考,具体如下:App Widgets 是一个小型应用程序的View 他可以嵌入到其他应用程序中(如 桌面程序) 并且可以得到周期性刷新。在创建App Widget之前需要了解以下几个概念AppWidgetProviderInfo对象它是对App Widget 元数据的一个描述,譬如 AppWidget的布局,刷新频率,以及...

weixin_34384824的博客 881

触发AppWidget上控件事件来更新AppWidget

思想:利用AppWidgetProvider里面的onReceive()事件接收广播来更新AppWidget。 步骤: 一、给AppWidget上的某个控件设置OnClickPendingIntent(): [code="java"]Intent UPintent=new Intent("zyf.test.widget.UP"); PendingIntent pendingInten...

忧郁天使 386

android 触发AppWidget上控件事件来更新AppWidget

思想:利用AppWidgetProvider里面的onReceive()事件接收广播来更新AppWidget。 步骤: 一、给AppWidget上的某个控件设置OnClickPendingIntent(): Intent UPintent=new Intent("zyf

无线.无极线 1034

Android中AppWidget详解

什么是AppWidget?AppWidget就是我们平常在桌面上见到的那种一个个的小窗口,利用这个小窗口可以给用户提供一些方便快捷的操作。本篇打算从以下几个点来介绍AppWidget:       1.如何创建一个简单的AppWidget       2.如何使得AppWidget与客户端程序交互 创建简单的AppWidget        在介绍之前给大家看一

期待 825

拜雨学Android之AppWidget

<script type="text/javascript"> var head = document.getElementsByTagName('head')[0], meta = document.createElement('meta'); meta.setAttribute(&#39...

weixin_40108434的博客 2576

安卓控件APPwidget

action android:name="li.appwidget03.UPDATE_APP_WIDGET"/> //和声明的常量updateAction对应。 //和声明的常量updateAction对应。//使用getBroadcast方法,得到一个PendingIntent对象,当该对象执行时,会发送一个广播。//第一个参数用来指定被绑定处理器的控件的ID。

m0_72495985的博客 208
上一篇: VS2005下编译调试保护模式32位汇编程序总结
下一篇: App Widget的更新方法介绍
RubyBoss
博客等级 码龄17年 157粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值