关于Android小组件的开发使用我们在这里不作展开,主要记录几个注意点:
1、Android小组件里可以发起网络请求,然后刷新小组件数据;
2、小组件的配置最小宽度android:minWidth的值设置过大可能导致在部分版本的操作系统上不会显示,尝试改小一点宽度值,比如:255dp,根据实际需要调整即可;
android:minWidth="255dp"
3、小组件的android:minWidth和android:minHeight的数值是按照格子(桌面图标)的数量来设置,1个格子是40dp,2个格子110dp,3个格子180dp,4个格子250dp,... n个格子70 * n - 30(来源于Google文档);但是如果不希望小组件会跟随系统设置的显示大小而变大(有些手机在系统设置-显示-显示大小,调整了更大的大小,小组件也会跟着放大),那么建议把android:minHeight设置小一些,比如:只想显示一行桌面图标的高度,也就是 4 x 1,那么可以这样设置:
android:minHeight="35dp"
这样即使系统设置了最大显示,小组件依然还是显示一行,如果设置成40dp的话会按照4 x 2的布局进行显示;
4、部分低版本系统(8.x 以下)的Android手机会把小组件的预览图(android:previewImage)缓存,即使卸载重装应用、重启手机、修改更换预览图图片名称等操作也无法刷新,通过还原手机设置可以刷新;
android:previewImage="@drawable/widget_weather_preview"
5、小组件的最小刷新间隔是30分钟,我这里设置的是一个小时
android:updatePeriodMillis="1800000"
6、在AppWidgetProvider的onUpdate回调函数中通过remoteViews.setOnClickPendingIntent给小组件设置点击打开应用,过一段时间可能会失效导致点击小组件无法启动应用,可以在onReceive回调函数中也设置一次,这样的话可以确保点击小组件打开应用一直不会失效;
override fun onReceive(context: Context, intent: Intent?) {
super.onReceive(context, intent)
val remoteViews = RemoteViews(context?.packageName, R.layout.weather_widget_layout)
val pendingIntent = HomeWidgetLaunchIntent.getActivity(
context,
MainActivity::class.java)
remoteViews.setOnClickPendingIntent(R.id.widget_container, pendingIntent)
// more logic here...
}