本文实现Widget中的按钮点击事件,点击一次下面的按钮,上面的数字减少1。

首先是Manifest文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.widget_sample"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" > <receiver android:name=".MainActivity" android:label="WIDGET_SAMPLE">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/my_widget" />
</receiver> <service android:name="MainActivity$MyService" >
<intent-filter>
<action android:name="Widget.Button.Click"></action>
</intent-filter>
</service> </application> </manifest>

需要注意的是在MainActivity$MyService中定义的<intent-filter>,其中的Widget.Button.Click是自己定义的Action,如果没有加上这个Action,就无法收到点击按钮时发出的Action,也就不会更新Widget。

Java文件:

package com.example.widget_sample;

import java.util.Timer;

import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews; public class MainActivity extends AppWidgetProvider{ public Context context;
static int num = 100;
static String tag_action = "Widget.Button.Click"; public void onUpdate(Context con, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
context = con;
Intent intent = new Intent(context, MyService.class);
context.startService(intent);
} //MyService服务程序
public static class MyService extends Service { public void onStart(Intent intent, int startId){
ComponentName thisWidget = new ComponentName(this, MainActivity.class);
AppWidgetManager manager = AppWidgetManager.getInstance(this); RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.activity_main);
// 点击按钮时
if (intent.getAction() != null){
if (intent.getAction().equals(tag_action)){
num--;
}
}
remoteViews.setTextViewText(R.id.textView1, String.valueOf(num));
// 定义一个Intent来发送按钮Action
Intent prevInten = new Intent();
prevInten.setAction(tag_action);
// 用Intent实例化一个PendingIntent
PendingIntent Pprevintent=PendingIntent.getService(this, 0,
prevInten, 0);
// 给RemoteView上的Button设置按钮事件
remoteViews.setOnClickPendingIntent(R.id.button1, Pprevintent);
manager.updateAppWidget(thisWidget, remoteViews);
} @Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
} }
}

首先,定义一个Intent,Action设置为"Widget.Button.Click",然后再用该Intent实例化一个PendingIntent,用RemoteViews.setOnClickPendingIntent()函数将PendingIntent和点击按钮的事件关联起来,最后更新Widget。

服务onStart()时,用Intent.getAction()函数得到Intent的Action,并判断是否是"Widget.Button.Click",如果是,表明这是单击按钮发出的Intent,num--,然后再更新Widget。这样就实现了单击按钮一次,num的值减少1。

Widget的点击事件的更多相关文章

  1. ANDROID_MARS学习笔记_S02_006_APPWIDGET2_PendingIntent及RemoteViews实现widget绑定点击事件

    一.代码流程 1.ExampleAppWidgetProvider的onUpdate(Context context, AppWidgetManager appWidgetManager, int[] ...

  2. Android ImageView图片透明区域不响应点击事件,不规则图片透明区域响应点击事件

    转载:http://blog.csdn.net/aminfo/article/details/7872681 经常会在项目中用到透明图片,不规则图片,特别是做游戏的时候,需要对图片的透明区域的点击事件 ...

  3. Android学习---ListView的点击事件,simpleAdapter和arrayadapter,SimpleCursoAdapter的原理和使用

    如题,本文将介绍 listview的点击事件,simpleAdapter和arrayadapter的原理和使用. 1.ListView的注册点击事件 //注册点击事件 personListView.s ...

  4. Android TextView 高亮字体并添加点击事件

    运行效果 package com.zutil.lib; import android.graphics.Typeface; import android.os.Bundle; import andro ...

  5. Android简单的ListViewDemo及每个控件的点击事件

    ListView是什么? ListView是一个 数据控件,可以展示从数据库中读取的数据.是.net3.5的新控件. 它比gridview更灵活,而且支持多种模板,支持分页. 文章地址 http:// ...

  6. 无废话Android之常见adb指令、电话拨号器、点击事件的4种写法、短信发送器、Android 中各种布局(1)

    1.Android是什么 手机设备的软件栈,包括一个完整的操作系统.中间件.关键的应用程序,底层是linux内核,安全管理.内存管理.进程管理.电源管理.硬件驱动 2.Dalvik VM 和 JVM ...

  7. 在Activity中响应ListView内部按钮的点击事件

    最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应? 对于这个问题,我最初给他的解答是,在Adapter中定义一个回调接口,在A ...

  8. Android多次点击事件的监听和处理

    package com.example.administrator.mystudent.MoreClick; import android.os.SystemClock; import android ...

  9. Android菜鸟成长记4-button点击事件

    Button 1.button按钮的创建 一般来说,在我们新建一个Android项目的时候,会有会默认有一个activity_main.xml的文件 如果你在新建项目的时候,把Create Activ ...

随机推荐

  1. js实现一个可以兼容PC端和移动端的div拖动效果

    前段时间写了一个简单的div拖动效果,不料昨天项目上正好需要一个相差不多的需求,就正好用上了,但是在移动端的时候却碰到了问题,拖动时候用到的三个事件:mousedown.mousemove.mouse ...

  2. 知方可补不足~row_number,rank,dense_rank,ntile排名函数的用法

    回到目录 这篇文章介绍SQL中4个很有意思的函数,我称它的行标函数,它们是row_number,rank,dense_rank和ntile,下面分别进行介绍. 一 row_number:它为数据表加一 ...

  3. 11.按要求编写Java应用程序。 (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另 一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。

    package java1; public class Che { //属性 public String nub; public int speed; public double weight ; C ...

  4. POJ1014 解题报告(DFS)

    题目在此:http://poj.org/problem?id=1014 要看清题意呢,题中要求输入的是价值分别为1,2,3,4,5,6的大理石的个数,而不是6块价值为输入数字的大理石!选这个题主要想练 ...

  5. 快速入门系列--WCF--02消息、会话与服务寄宿

    经过WCF基础的ABC学习,已经可以构建简单的WCF的服务,使用不同的服务地址和绑定类型,根据业务提供所需的服务契约.但不禁想问,服务所使用的消息报文是什么样的形式么?蕴含什么样内容呢?WCF服务是否 ...

  6. angularJS之事件处理

    angularJS的事件不像js一样,会默认有冒泡和捕获,还有angularJS之间的同名控制器之间,也只是同名, 不会让他们关联起来,就是这个名字的控制器的数据的改变不会影响到另一个同名的控制器. ...

  7. Android入门(七)碎片的生命周期与限定符

    原文链接:http://www.orlion.ga/560/ 这篇文章实际已经在上篇文章中写的差不多了,但是万恶的wordpress没保存!已经不止一次出现这种情况了! 一.碎片的生命周期 1.碎片的 ...

  8. 多个Jar包的合并操作

    原文:http://www.cnblogs.com/meteoric_cry/p/4283656.html 需求是将多个jar合并成一个jar的问题.这里列一下操作步骤: 1.将所有jar文件复制至某 ...

  9. DOM一致性检测

    [implementation] 由于DOM分为多个级别,也包含多个部分,因此检测浏览器实现了DOM的哪些部分就十分必要.document.implementation属性就是这些提供相应信息和功能的 ...

  10. java匿名类和匿名对象及this的其他用法

    /* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...