App Widget简单应用
首先后台进程创建一个PendingIntent对象,其中PendingIntent中包含一个真正的Intent,创建完成后将此PendingIntent对象交给桌面控件所在的进程,当用户点击桌面控件或者其他情况时,触发Intent,从而可实现启动一个Activity、发送一个Broadcast、启动一个Service。
创建PendingIntent的方法,其中的三个方法都是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的作用
1、RemoteViews对象表示一系列的View对象
2、RemoteViews所表示的对象运行在另外的进程当中
向App Widget中添加Button并为Button绑定监听事件:
首先在example_appwidget.xml添加Button按钮:
<Button
android:id="@+id/ButtonId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试按钮"/>
为Button绑定处理器:
由于App Widget和应用程序运行在不同的进程当中(App Widget当中的View运行在Home Screen进程当中),所以无法按照之前的惯用方法绑定监听器。
remoteViews.setOnClickPendingIntent(R.id.ButtonId, pendingIntent);
在ExampleAppWidgetProvider类(extends AppWidgetProvider)的onUpdate()方法:
<1>点击Button启动一个Activity:
for(int i = 0;i<appWidgetIds.length;i++){
//创建一个Intent对象
Intent intent = new Intent(context,MainActivity.class);
//创建一个PendingIntent
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
//为按钮绑定事件处理器
//第一个参数用来指定被绑定处理器的控件的ID
//第二个参数用来指定当事件发生时,哪个PendingIntent将会被执行
remoteViews.setOnClickPendingIntent(R.id.ButtonId, pendingIntent);
//更新AppWidget
//第一个参数用于指定被更新AppWidget的ID
appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
}
<2>点击Button发送一个广播事件,更新App Widget控件内容:
首先在AndroidManifest.xml文件中添加一个action,当intent包含此action时都可以被ExampleAppWidgetProvider类(extends AppWidgetProvider)接收
<receiver android:name="ExampleAppWidgetProvider">
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<intent-filter >
<action android:name="zhanglei.appwidget.UPDATE_APP_WIDGET"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info"/>
</receiver>
ExampleAppWidgetProvider类代码如下:
//定义一个常量字符串,该常量用于命名Action
private static final String UPDATE_ACTION = "zhanglei.appwidget.UPDATE_APP_WIDGET";
onUpdate()代码如下:
//创建一个Intent对象
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.example_appwidget);
remoteViews.setOnClickPendingIntent(R.id.ButtonId, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
调用RemoteViews类当中的方法更新控件:
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
super.onReceive(context, intent);
String action = intent.getAction();
if(UPDATE_ACTION.equals(action)){
//remoteViews代表整个Widget中的所有控件
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
//第一个参数是ImageView控件的ID
//第二个参数是图片的ID
remoteViews.setImageViewResource(R.id.ImageId, R.drawable.ic_launcher);
remoteViews.setTextViewText(R.id.textId, "text");
//得到AppWidgetManager对象
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
//componentName代表整个Widget
ComponentName componentNane = new ComponentName(context,ExampleAppWidgetProvider.class);
appWidgetManager.updateAppWidget(componentNane, remoteViews);
}
else{ //处理其他的action,调用父类中的onReceive方法
super.onReceive(context, intent);
}
}
App Widget简单应用的更多相关文章
- Android App Widget的简单使用
App Widget是一些桌面的小插件,比如说天气和某些音乐播放应用,放到桌面去的那部分: 例如: 实现步骤及代码如下: (1)首先,在AndroidManifest.xml中声明一个App Widg ...
- 一个App Widget实例第一次创建时被调用
事实上已经有很多的所谓的路由框架做到这一点,我也没有去研究别的,加上一直对backbone这个框架的评价不错,所以就琢磨着怎么用它实现我所需要的SPA的url管理了. 比如,你可能会说"如果 ...
- android app widget 创建调用周期
1 ?Android widget 大小问题 2 ?RemoteViewService Android开发历程_15(AppWidget的使用) Appwidget就是手机应用中常常放在桌面(即hom ...
- [安卓开发]App Widget开发入门指导
本节所要讲的主要内容包括Android桌面小部件.App Widget的开发入门指导,并通过一个简单实例的形式来直观的讲解App Widget. 一.Widget .App Widget .Web A ...
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews - 跨到对岸去
在之前的一篇博文( Android 之窗口小部件详解--App Widge t)中,已经介绍了App Widget的基本用法和简单实例.这篇主要讲解 App Widget 的高级内容,即通过 Remo ...
- Android 之窗口小部件高级篇--App Widget 之 RemoteViews
Android 之窗口小部件高级篇--App Widget 之 RemoteViews 在之前的一篇博文(Android 之窗口小部件详解--App Widget)中,已经介绍了App Widget的 ...
- 基于MaterialDesign设计风格的妹纸app的简单实现
代码地址如下:http://www.demodashi.com/demo/11644.html *今天看了郭神的第二行代码,深深的被MaterialDesign的设计风格所吸引,然后就照例做了一个小D ...
- App Widget
AppWidgetProviderInfo对象: 为App Widget提供元数据(描述数据的数据,如XML.关系型数据的表结构),包括布 局,更新频率等数据.这个对象被定义在XML文件当中: App ...
- APP Widget的开发
Android中经常用到APP Widget,如时钟,天气预报等. 长按屏幕,在弹出的对话框中选择“窗口小部件”,然后就列出了可选择的小部件,这些小部件就是APP Widget. 本文开发一个APP ...
随机推荐
- 猥琐的wordpress后门分享
https://www.t00ls.net/thread-37312-1-1.html 一个可以自动调用管理员帐号登录wordpress后台的方法. <?php require('../../. ...
- JS的面向对象编程一:封装
Javascript是一种基于对象的语言,但它又没有class.这在很长的一段时间里,对JS的面向对象编程的概念很模糊,在编程的时候时有用到,但要说个所以然,却说不出来,所以看了些书,又在网上查了些资 ...
- 利用canvas图片剪切
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...
- ffmpeg编译与移植问题
1.下载ffmpeg. 下载网址:http://www.ffmpeg.org/download.html 2.解压缩 tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Make ...
- ASP.NET TextBox 当鼠标点击后清空默认提示文字
ASP.NET TextBox 当鼠标点击后清空默认提示文字 [ 方法一] 前台代码: <div> <asp:TextBox ID="txtName" ru ...
- FMX保存JPG格式的Stream
刚刚看以前的笔记,估计这个用的人很少 var surf:TBitmapSurface; astream:TmemoryStream; begin surf:=TbitmapSurface.Create ...
- Call for Papers IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM)
IEEE/ACM International Conference on Advances in Social Network Analysis and Mining (ASONAM) 2014 In ...
- 完成整个DAO的实现及测试代码
package cn.itcast.domain; import java.util.Date; public class User { private int id; private String ...
- 学习笔记:因为java匿名类学习到接口的一些小用法
在看CometD的示例代码时发现了许多有意思的代码,但说实话看别人的代码确实是件很累的事情,所以就看到这个知识点做一下记录吧. 先看一段代码: 代码1 这段代码中有一个new的操作,而且是在方 ...
- RESTful API 设计最佳实践
背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...