motionEnabled

两个步骤

Android项目-Widget

Android项目-Widget

App Widgets是一个小的应用控件,它能够嵌入在其他的应用中(像主屏幕),并且可以周期性的更新。
能够拥有widget的应用程序被叫做App Widget host,

  • 简单创建widget (具体内容在开发文档中写的很详细)
    • 1.创建一个AppWidget类,继承AppWidgetProvider(这个类继承自BroadcastReceiver)
    • 2.在manifest文件中声明上面创建的AppWidget, 即声明
    • 3.在xml目录下,定义widget的元数据
    • 4.定义widget的布局文件

Widget的细节

  • 在配置widget的元数据时,
    • 如果widget的最小宽度大于屏幕的宽度,那么这个widget是不会被显示的
    • widget的默认更新时间是没个半个小时,如果我们设置android:updatePeriodMillis=”0”, 那么我们就可以自己控制这个更新时间。
  • widget的生命周期

    • onUpdate : Widget在更新时调用的方法
    • onDelete : 每当一个widget从桌面删除时会调用
    • onReceive: 当接收到Widget操作时首先调用的是OnReceive方法,然后才是相关的操作方法。可以说由这个方法去调用widget的其他的生命周期方法
    • onEnabled:此方法在Widget第一次被创建的时候调用,并且只调用一次,此方法中常放入初始化数据,服务的操作。
    • onDisabled:所用Widget被删除是调用的方法,同onEnabled方法相对
  • widget的生命周期方法中不能做耗时操作

    • 这是因为AppWidgetProvider实际上继承自BroadcastReceiver,要知道的是广播的onReceive()方法必须自10秒内完成,因此widget的生命周期方法也得在10内完成
    • 一般,我们可以开启一个服务去做业务逻辑相关事情

操作widget

既然把widget放在桌面上,我们肯定是要使用它来展示数据的,但是桌面是别人的App(例如 android launch2),即我们的widge是展示在别人的应用中的,
那么我们如何操作它呢?

要完成上面的工作,主要与这3个对象有关:

  • AppWidgetManager
    • 可以利用其updateAppWidget(ComponentName, RemoteViews)方法;来更新我们的widget

以下面代码为例:

这是位于以个服务的onCreate()方法中

    @Override
    public void onCreate() {
        super.onCreate();

        //桌面小控件的管理者 
        widgetManager = AppWidgetManager.getInstance(this);

        //下面要使用一个定时器,来周期性更新widget
        timer = new Timer();
        timerTask = new TimerTask() {       
            @Override
            public void run() {



                /**
                 * 由于更新的需要,这里初始化一个RemoteViews
                 * 包名即我们的应用程序的包名, 布局文件即我们的widget的布局文件
                 */
                RemoteViews views = new RemoteViews(getPackageName(), R.layout.process_widget);
                /**
                 * 需要注意的是,RemoteViews并没有findViewById()方法。
                 * 这里需要使用下面类似的方法来更新我们的widget界面控件显示
                 */
                views.setTextViewText(R.id.process_count,"正在运行的软件: 10"); 
                views.setTextViewText(R.id.process_memory, "可用内存:1G" );



                /*
                 *当我们的widget,响应点击事件时,也是不可以像以前那样处理, 可以通过启动一个广播、服务或者Activity的方式来响应我们的点击事件
                 *这里,启动一个广播
                 */
                Intent intent = new Intent();   
                //发送一个隐式意图
                intent.setAction("com.suixin.mobileguard.response_widget_receicer");    
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
                //设置点击事件
                views.setOnClickPendingIntent(R.id.btn_clear, pendingIntent);


                //第一个参数表示上下文
                //第二个参数表示我们的widget对应类(继承AppWidgetProvider)
                ComponentName provider = new ComponentName(getApplicationContext(), MyAppWidget.class);
                //更新桌面
                widgetManager.updateAppWidget(provider, views);         
            }
        };

        //从0开始。每隔5秒钟更新一次
        timer.schedule(timerTask, 0, 5000); 
    }
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sdlg2015/article/details/49933379
文章标签: android
个人分类: Android
上一篇Android进阶-点击事件的响应问题
下一篇Android进阶-自定义控件一
想对作者说点什么? 我来说一句

android widget初涉

2009年12月13日 552KB 下载

桌面时钟小部件

2013年10月25日 2.33MB 下载

android widget入门教程

2011年04月27日 1022KB 下载

Android入门

2012年12月27日 1.31MB 下载

Android 开发入门

2011年12月24日 1.31MB 下载

widget座机 支持android

2011年10月12日 282KB 下载

没有更多推荐了,返回首页

关闭
关闭