本文实现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. Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js

    Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一  三个基本的特性:封装.继承与多态1 1.2. 魔 ...

  2. WPF仿Win7便笺

    最近用WPF写了个仿WIN7下面的便笺小工具,还算是比较华丽的,相似度99%以上吧,在集成了便笺原有的功能以外,当然也做了略微的修改,比如加了关于作者版本信息和修改了原有删除便笺的系统弹出框.软件开机 ...

  3. iOS---NSAutoreleasePool自动释放原理及详解

    前言:当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池.它仍然是个正当的对象,因此自动释放池 定义的作用域内的其它对象可以向它发送消息.当程序 ...

  4. Servlet字符编码过滤器,实现图书信息的添加功能,避免产生文字乱码现象的产生

    同样的代码,网上可以找到和我一模一样的代码和配置,比我的更加详细,但是我重新写一个博客的原因自是把错误的原因写出来,因为这就是个坑,我弄了一天,希望对你们有所帮助.只为初学者发现错误不知道怎么解决有所 ...

  5. 在jQuery ajax中按钮button和submit的区别分析

    在使用jQuery ajax的get方法进行页面传值,不能用submit,否则无刷新获取数据展示 点击submit提交按钮,sendPwd.php通过$_POST接收传过来的值,然后echo一段数据. ...

  6. ASP.NET MVC中使用FluentValidation验证实体

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

  7. HTML内联元素

    前面的话 用于标记段落里的文本和其他内容组的元素种类很多,本文将这些文本级元素进行简单分类,便于整理和记忆 通用容器 <span>元素是短语内容的通用行内容器,并没有任何特殊语义.可以使用 ...

  8. 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能

                  本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...

  9. Huge Page 是否是拯救性能的万能良药?

    本文将分析是否Huge Page在任何条件下(特别是NUMA架构下)都能带来性能提升. 本博客已经迁移至: http://cenalulu.github.io/ 为了更好的体验,请通过此链接阅读: h ...

  10. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...