app widget简单用法(1)

本文章是对我学习 android 过程中学到的知识进行汇总、整理、与分享。内容来源为 网络流传的视频、文章、android官方文档等。在此感谢那些在我学习过程中提供知识和帮助的无私的人。


使用对象:AppWidgetProviderInfo 和 AppWidgetProvider 。

1. AppWidgetProviderInfo :为App Widget 提供元数据,包括布局,更新频率等信息。这个对象在XML中定义。

2.AppWidgetProvide :定义了App Widget 的生命周期函数。

创建步骤:

1. 定义AppWidgetProviderInfo :

(1)在res/xml 文件夹中定义一个名为 meta_data_appwidget_info.xml 的文件:

<appwidget-provider
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:minWidth="100dip"
     android:minHeight="100dip"
     android:updatePeriodMillis="43200000"
     android:initialLayout="@layout/appwidget">
</appwidget-provider>

 这里的 android:initialLayout="@layout/appwidget"  是app widget 的布局文件。

(2)在res/Layout 中创建 appwidget.xml 文件(app widget的布局文件)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
     >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#00ff00"
        android:text="@string/hello_world" />
</LinearLayout>

这里只用一个TextView做个简单示范。


2. 实现AppWidgetProvider (重写几个回调函数,实现生命周期?)

onUpdate: 在达到指定的更新时间之后,或当用户向桌面添加app widget 时会调用该方法。

onDeleted: 当app widget 被删除时,会调用该方法。

onEnabled: 当app widget 的第一个实例被创建时,会调用该方法。(用户可以添加n多个实例,但只有在第一次添加时才会调用这个方法)

onDisabled: 当 最后一个 app' widget 实例被删除后,会调用该方法。

onReveice: 接受广播事件。(app widget的状态改变,其实是通过广播来实现的)

onAppWidgetOptionsChanged: 当app widget 改变的时候,会调用该方法?

创建类 MyAppWidgetProvider ,继承 AppWidgetProvider 并重写上面几个方法。

注意因为 MyAppWidgetProvider 需要随时被 activity thread 访问,所以必须写成 public 。而且必须静态注册 receiver 。


3. 在 androidMainFest.xml 里注册一个receiver

 <receiver 
            android:name="MyAppWidgetProvider">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/meta_data_appwidget_info"/>

 </receiver>

这里的 android:name="MyAppWidgetProvider" 就是你继承 AppWidgetProvider 的那个子类的名字,注意名字前面没有” .“。

这里的 android:resource="@xml/meta_data_appwidget_info" 就是刚才在 xml 文件夹手动创建的 解析app widget 布局文件的文件。

这里的 action name 和 meta-data name 都是系统定义好,固定的。有时候代码填充不显示,需要自己手动敲上去。


至此,一个 add widget 就已经完成了。可以看到运行结果





我出现过的问题:

1. Unable to instantiate receiver ... (无法实例化接收器), class ... is not accessivle from class android.app.ActivityThread(不能从 android 系统的 Activity  线程 中访问)

问题原因:

 public class *** extends AppWidgetProvider {} ,*** 必须写成 public 。而且必须静态注册 receiver 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值