Android--桌面组件AppWidget

AppWidget通常被称为桌面插件,是Android系统应用开发层上的重要部分,是把一个进程的控件嵌入到别外一个进程的窗口里的一种方法,是与客户端程序交互的组件程序。

先看看效果图:

下面进行实例记录如何创建AppWidget,它是如何与客户端程序进行交互:

第一步:在res目录下新建xml文件夹并创建

ywx_appwidget_info.xml

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

</appwidget-provider>

第二步:新建布局文件ywx_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" >

    <TextView
        android:id="@+id/widgetText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/appwidget"
        android:background="#000000"/>

     <ImageView
          android:id="@+id/imageId"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/load"
          android:contentDescription="@id/imageId"/>
     <Button
          android:id="@+id/widgetBut"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/widgetText"/>

</LinearLayout>

第三步:新建一个ExampleAppWidgetProvider.java,实现AppWidgetProvider中的方法

package com.ywx.appwidget_04;
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.widget.RemoteViews;
public class ExampleAppWidgetProvider extends AppWidgetProvider{
	private static final String UPDATE_ACTION = "com.ywx.appwidget_04.UPDATE_APP_WIDGET";
	//接收广播事件
	@Override
	public void onReceive(Context context, Intent intent) {
		super.onReceive(context, intent);
	}

	//在到达指定的更新时间之后或者当用户向桌面添加App Widget时会调用该方法
	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds) {
		super.onUpdate(context, appWidgetManager, appWidgetIds);
	}

   	//当AppWidget被删除时,会调用该方法
	@Override
	public void onDeleted(Context context, int[] appWidgetIds) {
		super.onDeleted(context, appWidgetIds);
	}

	//当一个AppWidget的实例第一次被创建时会调用该方法
	@Override
	public void onEnabled(Context context) {
		super.onEnabled(context);
	}

	//当最后一个AppWidget实例被删除后调用该方法
	@Override
	public void onDisabled(Context context) {
		super.onDisabled(context);
	}
}

第四步:在AndroidManifest.xml中声明:这里有两个actiong,一个是系统的,一个是自定义的,只要满足任何一个action就会触发事件

<receiver android:name="ExampleAppWidgetProvider">
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <intent-filter >
                <action android:name="com.ywx.appwidget_04.UPDATE_APP_WIDGET"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/ywx_appwidget_info"/>
        </receiver>

完成以上四步就能够完成简单的AppWidget示例。

在AppWidget开发过程中主要运用到了PendingIntent和RemoteViews,下面将用法记录如下:

PendingIntent主要的三个方法:

1.getActivity(Context context,int requestCode,Intent intent,int flags)

2.getBroadcast(Context context,int requestCode,Intent intent,int flags)

3.getService(Context context,int requestCode,Intent intent,int flags)

RemoteViews的作用:表示一系列的view对象及所表示的对象运行在另外的进程当中。

appwidget组件程序并不是处在当前的进程当中,所以对于监听器的绑定事件与原来的有所区别:

在onUpdate()方法中添加

Intent intent = new Intent();
		intent.setAction(UPDATE_ACTION);
		//使用getBroadcast生成PendingIntent,当对象执行时,发送广播
		PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
		RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.ywx_appwidget);
		remoteViews.setOnClickPendingIntent(R.id.widgetBut, pendingIntent);
		appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

在onRecive()方法中添加

		String action = intent.getAction();
		if(UPDATE_ACTION.equals(action)){
			RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.ywx_appwidget);
			remoteViews.setImageViewResource(R.id.imageId, R.drawable.upload);
			remoteViews.setTextViewText(R.id.widgetText, "娃哈哈");
			AppWidgetManager appWidgeManager = AppWidgetManager.getInstance(context);
			ComponentName componentName = new ComponentName(context,ExampleAppWidgetProvider.class);
			appWidgeManager.updateAppWidget(componentName, remoteViews);
		}else{
			super.onReceive(context, intent);
		}

Android--桌面组件AppWidget,码迷,mamicode.com

时间: 2024-10-21 14:02:24

Android--桌面组件AppWidget的相关文章

Android之桌面组件AppWidget

转载:Android之桌面组件App Widget初探 Android开发应用除了程序应用,还有App Widget应用.好多人会开发程序应用而不会开发App Widget应用.本帖子就是帮助大家学习如何开发App Widget应用的. 先简单说说App Widget的原理.App Widget是在桌面上的一块显示信息的东西,通过单击App Widget跳转到程序入口类.而系统自带的程序,典型的App Widget是music,这个Android内置的音乐播放小程序.这个是典型的App Widg

Google Map和桌面组件 Android开发教程

本文节选于机械工业出版社推出的<Android应用开发揭秘>一 书,作者为杨丰盛.本书内容全面,详细讲解了Android框架.Android组件.用户界面开发.游戏开发.数据存储.多媒体开发和网络开发等基础知 识,而且还深入阐述了传感器.语音识别.桌面组件开发.Android游戏引擎设计.Android应用优化.OpenGL等高级知识.另外,本书还全面 介绍了如何利用原生的C/C++(NDK)和Python.Lua等脚本语言(Android Scripting Environment)来开发A

Android四大组件之Activity(活动)及其布局的创建与加载布局

Android四大组件之Activity(活动)及其布局的创建与加载布局 什么是Activity ? 活动(Activity)是包含用户界面的组件,主要用于和用户进行交互的,一个应用程序中可以包含零个或多个活动. 手动创建Activity的过程详解 到现在为止,你还没有手动创建过活动呢,在第一个安卓工程中,HelloWorldActivity是ADT帮我们创建的,手动创建活动可以加深我们的理解,因此现在是时候应该自己动手了. 首先,你需要再新建一个 Android 项目,项目名可以叫做 Acti

Android 桌面小部件(AppWidgetProvider)的应用

根据应用的需要,有的APP中内嵌了桌面小部件代码,以至于我们可以通过长按手机屏幕-->小部件-->选择你需要添加的应用小部件.这样可以给用户提过了较好的.快捷的使用体验方式,这边是Android桌面小部件的实际意义. 下图是有道词典的一个桌面小部件的实例(另外红日的icon便是红日APP的一个简单的桌面小部件): AppWidgetProvider是Android提供的用于实现桌面小部件的类,其本质是一个广播.另外也用到了RemoteViews这个类,这是一个跨进程的远程类,使用场景有两种:通

深入理解Android四大组件之一ContentProvider

ContentProvider作为Android四大组件之一,平时写自己的ContentProvider比较少,但是用到ContentProvider地方还是有的,比如去获取通讯录信息,这其实就间接的使用到了通讯录程序的ContentProvider组件. 先简单说一下ContentProvider组件.后面重点分析源码了解ContentProvider运行的过程. ContentProvider可以实现在应用程序之间共享数据. Android为常见的一些数据提供了默认的ContentProvi

Android四大组件之BroadcastReceiver详细解析

什么是BroadcastReceiver? BroadcastReceiver作为Android四大组件之一,在实际开发中也发挥着重要的作用,广播机制在Android程序通信中至关重要,广播其实与我们现实生活中的电台很相似,电台在某个频道上发送它的内容,那么只要有在收听这个频道的人都会收到这些内容.在Android中,广播也同样分为两个角色:广播发送者.广播接收者. BroadcastReceiver的应用场景 1.在一个应用中,我们的Activity与Service的通信就需要用到广播来作为中

App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南

面对越来越复杂的 App 需求,Google 官方发布了Android 框架组件库(Android Architecture Components ).为开发者更好的开发 App 提供了非常好的样本.这个框架里的组件是配合 Android 组件生命周期的,所以它能够很好的规避组件生命周期管理的问题.今天我们就来看看这个库的使用. 通用的框架准则 官方建议在架构 App 的时候遵循以下两个准则: 关注分离 其中早期开发 App 最常见的做法是在 Activity 或者 Fragment 中写了大量

我的Android第三章:Android的组件介绍

小编摘录了Android文档介绍Android四大组件的基本内容,感觉文档的内容写的很详细所以小编将它写入了博客 Android 使用Java语言开发.Android SDK 工具编译代码-以及任意数据并连同相关资源打包进一个Android 包内,它是一个以.apk 为后缀的压缩文件. 一个 .apk 文件中的 所有代码就是一个程序.这个.apk文件就用于在Android设备上安装这个程序. 一旦安装成功,这个Android程序就拥有了自己独立的运行沙盒(沙盒是在受限的安全环境中运行应用程序的一

Android四大组件--Activity详解

Android四大组件--Activity详解 分类: android android应用android开发 本文的主要内容包括1.activity的建立.配置和使用:2.activity的跳转和传值:3.startActivityForResult:4.activity的生命周期. 1.activity的建立.配置和使用 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个可视的窗口,一般情况