Appwidget深入 ----按钮事件 传值

在appWidget中,ImageButton和Button都是被支持的控件,其事件可分成三种类型: 
一、开启Activity 
二、开始Service 
三、发送按钮Action 
下面开始一个一个分析,如何实现。 
一、开启Activity 
  1、首先先定义个开启Activity的intent 
  eg: Intent intent=new Intent(this,FullScreen.class); 
  若要传递数据,则使用intent.putExtra()方法 
  eg: intent.putExtra("isCircle",isCircle); 
  2、用intent实例化一个PendingIntent,调用pendingIntent的getActicity方法来启动另一个Activity 
  ①若该Intent带有数据,则需要将最后一个参数的值设为:FLAG_CANCEL_CURRENT 
  eg:

PendingIntent Pintent=PendingIntent.getActivity(this, 0,intent,PendingIntent.FLAG_CANCEL_CURRENT); 
  ②若该Intent不带数据,则最后一个参数设为0 
  eg: PendingIntent Pfullintent=PendingIntent.getActivity(this, 0, fullIntent, 0); 
  3、实例化RemoteView,其对应相应的Widget布局 
  eg: RemoteViews views= newRemoteViews(getPackageName(), R.layout.widget); 
  4、给RemoteView上的Button或ImageButton设置按钮事件 
  eg: views.setOnClickPendingIntent(R.id.IBfullscreen,Pfullintent); 
  5、更新AppWidget界面 
  ①如果是在onUpdate()方法内更新AppWidget界面 
  eg: appWidgetManager.updateAppWidget(appWidgetIds, ActivityView); 
  ②如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量 
  eg: public RemoteViews views;//RemoteView对象 
  publicComponentName thisWidget; //组件名 
  public AppWidgetManager manager; // AppWidget管理器 
  thisWidget = new ComponentName(this,PictureAppWidgetProvider.class); 
  manager = AppWidgetManager.getInstance(this); 
  manager.updateAppWidget(thisWidget, views); 
二、开启Service 
  1、定义一个intent来开启Service 
  eg: Intent startServiceInten=newIntent("zyf.temp.Service.START"); 
  注:参数为开启Service的动作 
  2、用Intent实例化一个PendingIntent,利用PendingIntent的getService方法来启动一个服务 
  eg: PendingIntent Pintent=PendingIntent.getService(context, 0, startServiceInten, 0); 
  3、实例化RemoteView,其对应相应的Widget布局 
  eg: RemoteViews views= newRemoteViews(getPackageName(), R.layout.widget); 
  4、给RemoteView上的Button或ImageButton设置按钮事件 
  eg: views.setOnClickPendingIntent(R.id.IBfullscreen,Pfullintent); 
  5、更新AppWidget界面 
  ①如果是在onUpdate()方法内更新AppWidget界面 
  eg: appWidgetManager.updateAppWidget(appWidgetIds, ActivityView); 
  ②如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量 
  eg:

public RemoteViews views;//RemoteView对象 
  publicComponentName thisWidget; //组件名 
  public AppWidgetManager manager; // AppWidget管理器 
  thisWidget = new ComponentName(this,PictureAppWidgetProvider.class); 
  manager = AppWidgetManager.getInstance(this); 
  manager.updateAppWidget(thisWidget, views); 
三、发送按钮Action 
1、定义一个Intent来发送按钮Action 
eg: Intent prevInten=new Intent("PREV"); 
2、用Intent实例化一个PendingIntent,利用PendingIntent的getBroadcast方法来发送广播 
eg: PendingIntent Pprevintent=PendingIntent.getBroadcast(this, 0, prevInten, 0); 
3、实例化RemoteView,其对应相应的Widget布局 
eg: RemoteViews views= newRemoteViews(getPackageName(), R.layout.widget); 
4、给RemoteView上的Button或ImageButton设置按钮事件 
eg: views.setOnClickPendingIntent(R.id.IBprev,Pprevintent); 
5、更新AppWidget界面 
①如果是在onUpdate()方法内更新AppWidget界面 
eg: appWidgetManager.updateAppWidget(appWidgetIds, ActivityView); 
②如果是在onUpdate()方法外(一般为Service内)更新AppWidget界面,则需要定义几个变量 
eg: public RemoteViews views;//RemoteView对象 
publicComponentName thisWidget; //组件名 
public AppWidgetManager manager; // AppWidget管理器 
thisWidget = new ComponentName(this,PictureAppWidgetProvider.class); 
manager = AppWidgetManager.getInstance(this); 
manager.updateAppWidget(thisWidget, views); 
6、接收该Action 
①在AppWidget自己的onReceive方法内接收 
⒈在Action,要在Manifest.xml中加入Action 
eg: <intent-filter> 
<actionandroid:name="android.appwidget.action.APPWIDGET_UPDATE"></action> 
<actionandroid:name="PREV"></action> 
</intent-filter> 
⒉在onReceive()方法内编写要实现的动作 
eg: if(intent.getAction().equals("PREV")) 

//在这编写接收到该Action后要实现的动作 

②在Service内接收 
⒈注册一个BroadcastReceive,声明接收器 
eg: IntentFilter filter=new IntentFilter(); 
filter.addAction("PREV"); 
registerReceiver(doCommand, filter); 
⒉,在BroadcastReceive类的onReceive方法内编写要实现的动作 
eg: if(intent.getAction().equals("PREV")) 

//在这编写接收到该Action后要实现的动作 
}

时间: 2024-10-05 08:47:30

Appwidget深入 ----按钮事件 传值的相关文章

安卓之页面跳转与传值和按钮事件

一:新建页面 即新建Activity,new-other-Android Activity,next, 新建Activity的时候, 1:eclipse会自动创建Layout,我们发现Layout目录下会多了对应的xml文件: 2:ec会自动在AndroidManifest.xml中创建对应的activity节点: 需要注意的是,这些都是ec帮我们自动创建的,我们完全可以手动创建 class,然后让它继承自activity,然后指定layout的那个xml,然后手动创建节点完成. 二:点击按钮进

asp.net中父子页面通过gridview中的按钮事件进行回传值的问题

这两天写BS程序,遇到父子页面传值的问题,以前没写过web系统,用了几天时间才将问题解决,总结下记录下来: 问题描述: 父页面A中有一个gridview,每行6个列,有5列中均有一个按钮,单击按钮,会根据列的不同进入不同的子页面,在子页面中有获取数据,并返回父页面的gridview中对应的行的对应列中. 问题关键在于如果确定点击的是gridview的哪一行的哪个按钮,因为数据回传的时候,还要放入该行的该列中. 所以需要考虑一下几个方面: 1.动态添加行,以及各行的各列中的按钮 2.点击某行某列的

android安卓开发基础小笔记,添加按钮事件,打开新窗体,窗体传值,回传

给一个按钮添加onclick事件 //获取按钮对象 Button Aiyo = (Button)findViewById(R.id.button1); Aiyo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) {//tv.setText("woceshi"); //弹出提示 Toast.makeText(getApplicationContext(), '你好', Toas

IDA学习笔记--VS2008按钮事件捕捉

http://blog.csdn.net/ccnyou/article/details/8521611 IDA笔记--VS2008按钮事件捕捉 用到工具: IDA Proc C32Asm Rescope VS2008 LordPE 实例程序:MFCDemo.exe(附下载链接),我们目标是找到Button1对应的函数的地址处 附件包含:博客文章原文文档,文章中用到的MFCDemo程序. 下载链接:http://download.csdn.net/detail/ccnyou/5012040 1,首

iOS代码实现:创建按钮,绑定按钮事件,读取控件值

// // main.m // Hello // // Created by lishujun on 14-8-28. // Copyright (c) 2014年 lishujun. All rights reserved. // #import <UIKit/UIKit.h> // 视图控制器对象 @interface HelloWorldViewController : UIViewController @property (nonatomic, retain) IBOutlet UIT

android开发步步为营之22:处理Activity中的back按钮事件

在手机应用中,用户点击回退按钮一般是返回上个页面,一般页面不用处理,如果在首页,点回退,没任何提示,就把应用给关了,这个用户体验就不太好了,所以一般都会给用户一个确认的提示:是否退出?免得用户误操作. 一. Activity 中处理 @Override public boolean onKeyDown( int keyCode, KeyEvent event) { // TODO Auto-generated method stub Toast.makeText( this , "onkeydo

Ugui按钮事件添加方法

按钮事件添加方法3个例子 Eg1: using UnityEngine; using System.Collections; using UnityEngine.Events;//引用事件命名空间 using UnityEngine.UI;//引用UI命名空间 public class Test : MonoBehaviour { // Use this for initialization void Start () { //定义Action,并赋予delegate方法 UnityAction

MVC中使用内建的HTML辅助方法产生表单元素提交表单与button按钮事件的陷阱

网站模板页有个登陆的退出按钮,当点击时跳转到登陆页面. <button onclick="logout()" >退出</button> $("#logOut").click(function () { location.href = "@Url.Action("Logout", "Account")"; }); 然后再某个页面楼主用了HTML辅助方法产生表单元素,代码如下所示: @H

导航栏切换按钮事件

同事写的一段代码,不是很难,但感觉不错保存起来 // 导航栏切换按钮事件 $('ul.main-tab>li').on('mousedown', function() { var $this = $(this), $box = $('.main-tab-content'), i = $this.index(); if ($this.hasClass('on')) { return false; } switch (i) { case 0: break; case 1: updateRadarTa