AppWidget,及其与广播的相关处理
来源:互联网 发布:sigma化妆刷 淘宝授权 编辑:程序博客网 时间:2024/05/16 07:11
1.什么叫AppWidget?既是手机桌面放置的控件,shortcuts是快捷方式
2.AppWidgetProviderInfo对象是为AppWiget提供元数据,包括布局更新频率等数据,被定义在xml文件中
3.在res下新建个XML文件夹,下新建example_appwidget_info.xml文件
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"
android:updatePeriodMillis="86400000"更新的时间
android:initialLayout="@layout/example_appwidget">初始化布局
</appwidget-provider>
在layout下新建一个example_appwidget.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="firstappwidget"
android:background="#000000"/>
<ImageView android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/a" />
<Button android:id="@+id/btn"
android:layout_width="200px"
android:layout_height="50px"
android:text="btn " />
</LinearLayout>
在清单中新加receiver
<receiver android:name="ExampleAppWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<intent-filter>
<action android:name="cys.03.appwidget.UPDATE_WIDGET"/>
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info"/>/
</receiver>
两个intent-filter是等价的过滤器,任何一个满足条件就可以发送广播
meta-data,是为AppWidget 提供数据
主Activity与mainxml文件无关重要,src下新建一个ExampleWidget.java文件
package ntc.appwidget;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;
public class ExampleAppWidget extends AppWidgetProvider {
private static final String UPDATE_ACTION="cys.03.appwidget.UPDATE_WIDGET";
@Override
public void onDeleted(Context context, int[] appWidgetIds) {//删除时调用这函数
// TODO Auto-generated method stub
super.onDeleted(context, appWidgetIds);
Log.e("onDelete", "======");
}
@Override
public void onDisabled(Context context) {//删除最后一个时候,调用这函数
// TODO Auto-generated method stub
super.onDisabled(context);
Log.e("onDisabled", "======");
}
@Override
public void onEnabled(Context context) {//第一次调用AppWiget时候调用这个函数
// TODO Auto-generated method stub
super.onEnabled(context);
Log.e("onEnabled", "======");
}
@Override
public void onReceive(Context context, Intent intent) {//接收广播时调用这函数
// TODO Auto-generated method stub
if(intent.getAction().equals(UPDATE_ACTION)){
RemoteViews remoteviews=new RemoteViews(context.getPackageName(),R.layout .example_appwidget );
remoteviews.setImageViewResource(R.id.iv, R.drawable.b);
remoteviews.setTextViewText(R.id.tv, "Smile:"+")");
AppWidgetManager appwidgetmanager=AppWidgetManager.getInstance(context);
ComponentName compentname=new ComponentName(context,ExampleAppWidget.class);
appwidgetmanager.updateAppWidget(compentname, remoteviews);
}
else{
super.onReceive(context, intent);}//else 作用是当 没有发送广播时还可以调用这个方法,注意第二次以上点击button会促发else的事件
Log.e("onReceive", "======");
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {//调用AppWidget时调用这函数
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
Log.e("onUpdate", "======");
Intent intent=new Intent();
intent.setAction(UPDATE_ACTION);
PendingIntent pendingIntent=PendingIntent.getBroadcast(context, 0, intent, 0);//获取广播
RemoteViews remoteviews=new RemoteViews(context.getPackageName(),R.layout.example_appwidget);
remoteviews.setOnClickPendingIntent(R.id.btn, pendingIntent);//发送广播
appWidgetManager.updateAppWidget(appWidgetIds, remoteviews);
}
//注,每个intent事件都是由receive方法执行的究竟执行哪个方法是依据intent的Action所决定的,当remoteviews发生变化时会执行receive方法
//remoteviews是appwidget 的控件,ComponentName是整个appwidget
}
- AppWidget,及其与广播的相关处理
- AppWidget组件的处理事件
- Android-接受来自Appwidget的广播、更新Appwidget控件的状态
- Android-接受来自Appwidget的广播、更新Appwidget控件的状态
- Android开发之接受来自Appwidget的广播、更新Appwidget控件的状态
- Android中的静态系统广播与动态系统广播及其相应的注册与接收
- android常用系统广播及其处理
- 使用AppWidget进行广播更新
- 无线广播相关信号(收音机)的发射与接收
- Android AppWidget的分析与应用AppWidgetProvider
- 处理Java及其相关字符集编码的问题
- Oracle中NULL的定义及其相关处理办法
- python知识点-->字符串相关处理及其的应用
- DroidPlugin源码分析服务与静态广播的处理
- Android 蓝牙相关的广播
- Android 蓝牙相关的广播
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- 路客网王鑫光:2012是团购移动电商年
- raised exception class EAccessViolation with message 'Access violation ataddress 64FF0002. Read of a
- Visual Studio 2005下C++智能设备应用程序常见错误及解决方法
- S2SH集成 OpenSessionInViewFilter 出错
- 【动态规划】采油区域
- AppWidget,及其与广播的相关处理
- 通过代码给IIS增加主机头
- 第四章:调试技术
- 移动互联网服务客户端开发技巧系列
- 搜索引擎优化“内容为王,外链为皇”之谜
- android直接从图片中对二维码编码解码
- echo -e 在shell script 方式下运行的问题
- 双向链表
- 一步步搭建 centos 环境下apache与Subversion集成