AppWidget应用(三)---PendingIntent 之 getBroadcast

下面我们来看下appWidget如何通过广播来更新appWidget上的信息,在AppWidget应用(二)的基础上,需要添加一个自定义的消息,并且在AndriodMainfest上注册;代码如下

[html] view plaincopy

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.appwidgetdemo"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6. <uses-sdk
  7. android:minSdkVersion="8"
  8. android:targetSdkVersion="17" />
  9. <application
  10. android:allowBackup="true"
  11. android:icon="@drawable/ic_launcher"
  12. android:label="@string/app_name"
  13. android:theme="@style/AppTheme" >
  14. <activity
  15. android:name="com.example.appwidgetdemo.MainActivity"
  16. android:label="@string/app_name" >
  17. <intent-filter>
  18. <action android:name="android.intent.action.MAIN" />
  19. <category android:name="android.intent.category.LAUNCHER" />
  20. </intent-filter>
  21. </activity>
  22. <receiver android:name="com.example.appwidgetdemo.appWidgetActivity" >
  23. <intent-filter>
  24. <action android:name="android.appwidget.action.APPWIDGET_UPDATE" >
  25. </action>
  26. </intent-filter>
  27. <meta-data
  28. android:name="android.appwidget.provider"
  29. android:resource="@xml/appwidget01" />
  30. <!-- 注册要处理的消息 -->
  31. <span style="color:#ff0000;"><intent-filter>
  32. <action android:name="com.example.appWidgetUpdate" >
  33. </action>
  34. </intent-filter></span>
  35. </receiver>
  36. </application>
  37. </manifest>

广播消息定义为:private static final String UPDATE_RECEIVE = "com.example.appWidgetUpdate";

然后重载AppWidgetProvider中的几个方法

[java] view plaincopy

  1. /**
  2. * 接受广播事件
  3. */
  4. @Override
  5. public void onReceive(Context context, Intent intent) {
  6. // TODO Auto-generated method stub
  7. String Msg = intent.getAction();
  8. //处理我们自定义的消息
  9. if (Msg.equals(UPDATE_RECEIVE)) { // 判断广播如果为:com.qlf.appWidgetUpdate才处理
  10. System.out.println("----------------onReceive");
  11. // 只能通过远程对象来设置appwidget中的控件状态
  12. RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
  13. R.layout.appwidgetlayout);
  14. //改变指定控件的值
  15. remoteViews.setTextViewText(R.id.txtapp, "我变-hihi");
  16. remoteViews.setImageViewResource(R.id.image, R.drawable.local_file);
  17. // 获得appwidget管理实例,用于管理appwidget以便进行更新操作
  18. AppWidgetManager appWidgetManager = AppWidgetManager
  19. .getInstance(context);
  20. // 相当于获得所有本程序创建的appwidget
  21. ComponentName componentName = new ComponentName(context,
  22. appWidgetActivity.class);
  23. // 更新appwidget
  24. appWidgetManager.updateAppWidget(componentName, remoteViews);
  25. }
  26. //处理系统发送的消息
  27. else{
  28. super.onReceive(context, intent);
  29. }
  30. }
  31. /**
  32. * 到达指定的更新时间或者当用户向桌面添加AppWidget时被调用
  33. */
  34. @Override
  35. public void onUpdate(Context context, AppWidgetManager appWidgetManager,
  36. int[] appWidgetIds) {
  37. System.out.println("----------------onUpdate");
  38. // TODO Auto-generated method stub
  39. // 创建一个Intent对象
  40. Intent intent = new Intent();
  41. intent.setAction(UPDATE_RECEIVE);
  42. // 这里是getActivity,当然也可以是broadcastReceiver等   发送一个广播消息
  43. PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
  44. intent, 0);
  45. RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
  46. R.layout.appwidgetlayout);
  47. //为按钮绑定监听器
  48. remoteViews.setOnClickPendingIntent(R.id.btnSend, pendingIntent);
  49. // 更新Appwidget
  50. appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
  51. }

启动后的效果如图所示:

点击按钮后TextView 和 ImageView都改变了

照旧附上源码

点击打开链接

原文:http://blog.csdn.net/deng0zhaotai/article/details/10414285

AppWidget应用(三)---PendingIntent 之 getBroadcast

时间: 2024-11-26 04:24:44

AppWidget应用(三)---PendingIntent 之 getBroadcast的相关文章

AppWidget学习总结

一.创建AppWidget.    1.在res/xml下创建一个xml文件,以设置widget占用的空间等信息.如widget_provider.xml        <?xml version="1.0" encoding="utf-8"?>        <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"       

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

在appWidget中,ImageButton和Button都是被支持的控件,其事件可分成三种类型: 一.开启Activity 二.开始Service 三.发送按钮Action 下面开始一个一个分析,如何实现. 一.开启Activity   1.首先先定义个开启Activity的intent   eg: Intent intent=new Intent(this,FullScreen.class);   若要传递数据,则使用intent.putExtra()方法   eg: intent.put

手机卫士10_widget_流量统计_手机杀毒

1._widget入门: 查看帮助文档>>Developrs>>API Guides>>App Widgets 实际上是一个迷你的应用程序VIew视图,嵌入在另外一个应用程序视图. 标准的android和兼容widget的手机才能显示,被修改过的系统是无法显示的. 实现步骤: ①创建类继承APPWidgetProvider//一个方便的帮助类,用来实现一个appwidget 它继承了广播接收者,实现原理也是通过广播实现的,特殊的广播接收者. ②在清单文件里配置广播接收者

为Widget添加事件

  原帖:http://bbs.51cto.com/thread-965565-1-1.html 在appWidget中,ImageButton和Button都是被支持的控件,其事件可分成三种类型: 一.开启Activity 二.开始Service 三.发送按钮Action 下面开始一个一个分析,如何实现. 一.开启Activity 1.首先先定义个开启Activity的intent eg:   Intent fullIntent=new Intent(this,FullScreen.class

android app widget 创建调用周期

Android开发历程_15(AppWidget的使用) Appwidget就是手机应用中常常放在桌面(即home)上的一些应用程序,比如说闹钟等.这种应用程序的特点是它上面显示的内容能够根据系统内部的数据进行更新,不需要我们进入到程序的内部去,比如说闹钟指针的摆动等.本节内容就简单的介绍下实现这种功能所用到的appwidget技术,通过3个例子由浅入深来学会使用它.参考资料是mars的教程. 实验基础: 自己实现一个AppWidget的步骤如下: 1. 在src目录下新建一个名为xml的文件夹

android: 接收和发送短信

8.2    接收和发送短信 收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这 项功能,而 Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.每个 Android 手机都会内置一个短信应用程序,使用它就可以轻松地完成收发短信的操作,如 图 8.4 所示. 图   8.4 不过作为一名开发者,仅仅满足于此显然是不够的.你要知道,Android 还提供了一系 列的 API,使得我们甚至可以在自己的应用程序里接收和发送短信.也就是说,只要你有足 够的信

Android学习笔记之AlarmManager有关的定时器和闹钟的实现

毕业设计中有个功能模块叫就医提醒,大抵的功能就是用户设定一个未来时间的闹钟,并设置闹钟的标签,标签上写着去哪里就医之类的信息,主要设计参考魅族系统自带的闹钟功能.我在网上看了不少博客,也在github上下载了不少源码,发现也没有写的特别好的,总有这种或者那种的问题,比如说闹钟不是写成后台服务的模式,APP关闭之后闹钟不会提醒,或者手机关机之后之前设置的闹钟信息丢失,所以我准备自己写一个功能比较齐全的. 所以这个闹钟的功能需要用到Android的数据库Sqlite.Service.Broadcas

Android PendingIntent的getActivity()、getBroadcast()、getService()方法的区别

pendingIntent是一种特殊的Intent.主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的.pendingIntent执行的操作实质上是参数传进来的Intent的操作,但是使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的. 主要的使用的地方和例子:通知Notificatio的发送,短消息SmsManager的发送和警报器AlarmManager的执行等等. PendingIntent中 getActivi

AppWidget应用(四)---PendingIntent 之 getService

下面给出一个appWidget中Service通讯的例子 创建一个Service子类,用来处理appWidget发送过来的命令 [java] view plaincopy package com.example.service; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class myService extends Service{ @Override