AppWidget,及其与广播的相关处理
2012-03-29 13:21
288 查看
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
}
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
}
相关文章推荐
- Android Launcher对于AppWidget处理的分析:AppWidgetHost角色
- php学习笔记(六)数组及其相关处理函数
- php学习笔记(五)字符串及其相关处理函数
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- app微信支付宝支付后台的插件模式+回调通过spring广播处理后续业务(已亲测可用)
- ANDROID_MARS学习笔记_S02_006_APPWIDGET3_AppWidget发送广播及更新AppWidget
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- 处理Java及其相关字符集编码的问题
- 监听APP升级广播处理
- Android 5 之widget及其广播
- Oracle中NULL的定义及其相关处理办法
- Android开发之接受来自Appwidget的广播、更新Appwidget控件的状态
- python知识点-->字符串相关处理及其的应用
- 1962:NO operating system found处理及其相关问题
- 【笔记】微信头条app全栈中html相关处理
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- 使用AppWidget进行广播更新
- Android中Launcher对于AppWidget处理的分析:AppWidgetHost角色
- 监听APP升级广播处理
- App是什么,可以分为哪几类?及其相关解释。