有哪些专门做展会创意的网站,网站建设高端设计,建设代刷网站,网页版qq中心登录入口本篇主要对appwidget开发进行简单介绍#xff0c;为后续漏洞挖掘相关做前置铺垫 appwidget简介
官方解释如下#xff1a;
应用微件是可以嵌入其他应用#xff08;如主屏幕#xff09;并接收定期更新的微型应用视图。这些视图称为界面中的微件#xff0c;您可以使用应用微… 本篇主要对appwidget开发进行简单介绍为后续漏洞挖掘相关做前置铺垫 appwidget简介
官方解释如下
应用微件是可以嵌入其他应用如主屏幕并接收定期更新的微型应用视图。这些视图称为界面中的微件您可以使用应用微件提供程序发布微件。能够容纳其他应用微件的应用组件称为应用微件托管应用。下面的屏幕截图显示了音乐应用微件。
实际也就是桌面的小组件现在的主流app基本都会搞这个东西如下
appwidget开发流程
androidmanifest.xml声明receiver 定义appwidget的元数据【基本特性样式】 书写appwidget的layout布局文件 实现extends AppWidgetProvider的widget
1.androidmanifest声明 receiverandroid:name.NewAppWidgetandroid:exportedfalseintent-filteraction android:nameandroid.appwidget.action.APPWIDGET_UPDATE //intent-filtermeta-dataandroid:nameandroid.appwidget.providerandroid:resourcexml/new_app_widget_info //receiver2.AppWidgetProviderInfo 元数据
demo
?xml version1.0 encodingutf-8?
appwidget-provider xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:descriptionstring/app_widget_descriptionandroid:initialKeyguardLayoutlayout/new_app_widgetandroid:initialLayoutlayout/new_app_widgetandroid:minWidth40dpandroid:minHeight40dpandroid:previewImagedrawable/example_appwidget_previewandroid:previewLayoutlayout/new_app_widgetandroid:resizeModehorizontal|verticalandroid:targetCellWidth1android:targetCellHeight1android:updatePeriodMillis86400000android:widgetCategoryhome_screen /一些属性注解
initialLayout指定微件的布局资源minWidth、minHeight默认情况下微件的最小占用空间minResizeWidth、minResizeHeight微件的绝对最小大小。意思这个是下限小于这个标准微件就不能用了minResizeWidth、minResizeHeight指定微件可以调整到的最小宽高previewImage微件的预览显示设置resizeMode设置微件大小调整的规则 horizontalverticalnone【默认】 widgetCategory微件是否可以显示在主屏幕 (home_screen) 以及锁定屏幕 (keyguard)上【高于android5.0则只有home_screen可用】configure配置微件的activity【可选】updatePeriodMillis配合下面的onUpdate回调方法确定微件的更新频率
3.layout布局文件
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidstylestyle/Widget.Appwidget.AppWidget.Containerandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:themestyle/Theme.Appwidget.AppWidgetContainerTextViewandroid:idid/appwidget_textstylestyle/Widget.Appwidget.AppWidget.InnerViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_centerHorizontaltrueandroid:layout_centerVerticaltrueandroid:layout_margin8dpandroid:contentDescriptionstring/appwidget_textandroid:textstring/appwidget_textandroid:textSize24spandroid:textStylebold|italic /
/RelativeLayout支持的布局
RemoteViews 对象 FrameLayoutLinearLayoutRelativeLayoutGridLayoutViewStub 微件类【不支持下列类的后代】 AnalogClockButtonChronometerImageButtonImageViewProgressBarTextViewViewFlipperListViewGridViewStackViewAdapterViewFlipper
4.AppWidgetProvider的周期函数
onUpdate()【核心】默认生成
按照指定的时间间隔updatePeriodMillis更新微件还有一个规则 如果声明配置了对应的activity则在微件被创建时由activity来执行首次更新如果没有配置对应的activity则在微件被创建时该方法也会被调用 Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {// There may be multiple widgets active, so update all of themfor (int appWidgetId : appWidgetIds) {updateAppWidget(context, appWidgetManager, appWidgetId);}}onAppWidgetOptionsChanged()
每次调整应用微件大小的时候会被调用 Overridepublic void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);}onDeleted(Context, int[])
每次删除应用微件实例的时候会被调用 Overridepublic void onDeleted(Context context, int[] appWidgetIds) {super.onDeleted(context, appWidgetIds);}onEnabled(Context)默认生成
首次创建应用微件实例的时候会被调用【数据库创建打开等】 Overridepublic void onEnabled(Context context) {// Enter relevant functionality for when the first widget is created}onDisabled(Context)默认生成
删除应用微件的最后一个实例时会被调用【删除数据库等】 Overridepublic void onDisabled(Context context) {// Enter relevant functionality for when the last widget is disabled}onReceive(Context, Intent)
针对每个广播调用该方法 Overridepublic void onReceive(Context context, Intent intent) {super.onReceive(context, intent);}如果想看实际效果的话可以直接android studio建一个默认的appwidget然后分析生成的源码 官方链接