widget桌面组件问题

       widget 桌面组件准确来讲应该是appwidget,平时习惯我们默认了widget就是说桌面组件,对于widget组件的发展历史可以参考这个网址http://baike.baidu.com/view/3541797.html

      

Intent taskClick = new Intent(context, TaskStopProgress.class);
			Intent sdClick = new Intent(SD_CLICK_ACTION);
			Intent usbClick = new Intent(USB_CLICK_ACTION);
			PendingIntent pendingIntent1;
			PendingIntent pendingIntent2;
			PendingIntent pendingIntent3;
			pendingIntent2 = PendingIntent.getService(context1, 0, usbClick, 0);
			pendingIntent1 = PendingIntent.getService(context1, 0, sdClick, 0);
			pendingIntent3 = PendingIntent
					.getActivity(context, 0, taskClick, 0);
			rv.setOnClickPendingIntent(R.id.SD_ImgView, pendingIntent1);
			rv.setOnClickPendingIntent(R.id.Task_ImgView, pendingIntent3);
			rv.setOnClickPendingIntent(R.id.USB_ImgView, pendingIntent2);
			appWidgetManager.updateAppWidget(appWidgetId, rv);
一般的appwidget组件事件绑定方式如下,首先new Intent 新建的intent由你的PendingIntent通知对象不同而不同,如果为service我们既可以通过getbroadcast方式广播,然后再service那一端用getintent方式获取传递过来的消息,也可以通过getservice方式调用service,只不过这种方式和startservice方式是差不多的,我们在service的onstart方法中就可以通过其参数intent获取传递过来的消息(也可以在onstartcomment回调函数中获取),而Remotviews主要是通过AppWidgetManager对象的updateAppWidget函数进行更updateAppWidget第一参数有两种形式ComponentName和appWigetID(Int型也就是每个组件的id)而ComponentName
		thisWidget = new ComponentName(OperaService.this,
				TaskOperationProvider.class);
构建形式如上代码所示,而AppwidgetManager构建形式如下:
appManager = AppWidgetManager.getInstance(OperaService.this);
其实说了这么多,在桌面组件更新时,最最关键的还是Remoteviews对象,我们先来看下其构造函数的两个参数帮助文档如下
RemoteViews(String packageName, int layoutId)
第一个为该应用的packageName,而第二个为appwidget的布局文件的id,所以只要Remoteviews得到的是同一appWdiget的对象,那么桌面组件的按键效果就会存在,但是如果android系统由于某种原因的launcher对所有的桌面组件重新rebinding了,那么此时自己的应用获取的RemoteViews还是不是以前那个呢,有可能不是了,所以此时会表现出桌面组件无响应现象,解决此问题方法有很多,其中一个有效方法便是重新执行setOnClickPendingItent重新绑定控件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值