http://blog.csdn.net/andy_android/article/details/7006767

在appWidget中,ImageButton和Button都是被支持的控件,其事件可分成三种类型:
一、开启Activity
二、开始Service
三、发送按钮Action

下面开始一个一个分析,如何实现。

一、开启Activity
1、首先先定义个开启Activity的intent
eg: 

Intent fullIntent=new Intent(this,FullScreen.class);
若要传递数据,则使用intent.putExtra()方法
eg:  fullIntent.putExtra("isCircle",isCircle);

2、用intent实例化一个PendingIntent,调用pendingIntent的getActicity方法来启动另一个Activity
①若该Intent带有数据,则需要将最后一个参数的值设为:FLAG_CANCEL_CURRENT
eg:  PendingIntent Pfullintent=PendingIntent.getActivity(this, 0, fullIntent,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: 
     
     
   

⒉在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后要实现的动作
}

更多相关文章

  1. 【Android】解决FloatMath类中方法在API 23以后不存在问题
  2. Android(安卓)手机 Google Play 商店“从服务器检索信息时出错 [
  3. Android自带倒计时控件Chronometer使用方法详解
  4. Android(安卓)SoundPool sample 1 not ready错误解决方法
  5. 移植ffmpeg到android_1
  6. android loading界面 及 处理
  7. Android(安卓)SDK Manager软件包下载安装相关问题的解决办法
  8. Handler、Message的简单使用
  9. Android之SurfaceView(六)

随机推荐

  1. Android(安卓)中 startService()启动serv
  2. Android布局常用控件
  3. Android Studio 开发经验纵览
  4. 一种基于Android智能手机的远程视频监控
  5. Android(安卓)Studio第二期 - 短信自动填
  6. Android low memory killer 详解
  7. 《交互式视觉设计》大纲
  8. Android(安卓)蓝牙BLE开发详解
  9. 激进地用着Android(安卓)Studio
  10. API Guides - introduction