想要做个可以在桌面上显示的插件需要3个步骤:
  1. 继承AppWidgetProvider
  2. 编写widget的界面xml, 编写mywidget属性xml
  3. AndroidManifest.xml  注册插件
 
先上图

这个案例是一个会自增的数字, 非常的简单。
 
1. 继承AppWidgetProvider
[java]  
public class MyWidgetProvider extends AppWidgetProvider  
{  
    private static Timer myTimer;  
    private static int index = 0;  
      
    private final String broadCastString = "knowheart.wd.appWidgetUpdate";   
      
    @Override  
    public void onDeleted(Context context, int[] appWidgetIds)  
    {  
        // TODO Auto-generated method stub  
        super.onDeleted(context, appWidgetIds);  
          
    }  
      
      
  
    @Override  
    public void onEnabled(Context context)  
    {  
        // TODO Auto-generated method stub  
        super.onEnabled(context);  
          
    }  
  
  
  
    @Override  
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,  
            int[] appWidgetIds)  
    {  
        // TODO Auto-generated method stub  
        super.onUpdate(context, appWidgetManager, appWidgetIds);  
    }  
      
      
      
    @Override  
    public void onReceive(Context context, Intent intent)  
    {  
        super.onReceive(context, intent);  
    }  
  
}  
首先我们添加一个类, 用于继承AppWidgetProvider, 它就是用来控制我们的插件更新删除的一些操作
这里会用到onEnabled、onUpdate、onReceive三个方法
 
  2. 编写widget的界面xml, 编写mywidget属性xml
layout/widget_layout.xml
[html] 
<?xml version="1.0" encoding="utf-8"?>    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:background="#000000"  
    android:layout_gravity="center_horizontal"  
    android:layout_width="300dp"  
    android:layout_height="wrap_content">  
  
    <TextView  
        android:id="@+id/update"  
        android:text="0"   
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"   
        android:gravity="center"  
     />  
      
</LinearLayout>  
 
新建一个文件夹命名xml, 再添加一个xml文件
xml/mywidget.xml
[html]  
<?xml version="1.0" encoding="UTF-8"?>  
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"    
    android:minWidth="300dip" android:minHeight="72dp"    
    android:updatePeriodMillis="86400000"   
    android:initialLayout="@layout/widget_layout"    
    >    
</appwidget-provider>    
 
这里设置插件的长宽、刷新时间, 0为手动刷新、以及插件的界面xml
 
  3. AndroidManifest.xml  注册插件
[html] 
<!-- 注册该插件 -->  
       <receiver android:name="MyWidgetProvider" >  
           <intent-filter >  
               <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />  
               <action android:name="com.wd.appWidgetUpdate" >  
               </action>  
           </intent-filter>  
  
           <meta-data  
               android:name="android.appwidget.provider"  
               android:resource="@xml/mywidget" />  
       </receiver>  
 
 
<action android:name="com.wd.appWidgetUpdate" >  这一段是向系统注册一个广播, 我们会在逻辑处理时将该广播发送给AppWidgetProvider的更新方法, 以实现手动刷新。
 
那么完成上面三部基本上就可以显示一个插件在桌面上了。
 
如果我们想让插件显示的数字每秒加一的话, 我们需要做后台处理
[java] 
public class MyWidgetProvider extends AppWidgetProvider  
{  
    private static Timer myTimer;  
    private static int index = 0;  
      
    //定义我们要发送的事件  
    private final String broadCastString = "com.wd.appWidgetUpdate";   
      
    @Override  
    public void onDeleted(Context context, int[] appWidgetIds)  
    {  
        // TODO Auto-generated method stub  
        super.onDeleted(context, appWidgetIds);  
          
        System.out.println("onDeleted");  
    }  
      
      
  
    @Override  
    public void onEnabled(Context context)  
    {  
        System.out.println("onEnabled");  
        // TODO Auto-generated method stub  
        super.onEnabled(context);  
          
        //在插件被创建的时候这里会被调用, 所以我们在这里开启一个timer 每秒执行一次  
        MyTask mMyTask = new MyTask(context);  
        myTimer = new Timer();  
        myTimer.schedule(mMyTask, 1000, 1000);  
        System.out.println("onEnabled2");  
    }  
  
  
  
    @Override  
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,  
            int[] appWidgetIds)  
    {  
        System.out.println("onUpdate");  
        // TODO Auto-generated method stub  
        super.onUpdate(context, appWidgetManager, appWidgetIds);  
    }  
      
      
      
    @Override  
    public void onReceive(Context context, Intent intent)  
    {  
        //当判断到是该事件发过来时, 我们就获取插件的界面, 然后将index自加后传入到textview中  
        System.out.println("onReceive");  
        if(intent.getAction().equals(broadCastString))  
        {  
            index++;  
              
            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);  
            rv.setTextViewText(R.id.update, Integer.toString(index));  
              
            //将该界面显示到插件中  
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  
            ComponentName componentName = new ComponentName(context,MyWidgetProvider.class);  
            appWidgetManager.updateAppWidget(componentName, rv);  
        }     
        // TODO Auto-generated method stub  
        super.onReceive(context, intent);  
    }  
  
  
      
    class MyTask extends TimerTask  
    {  
  
        private Context mcontext = null;  
        private Intent intent = null;  
          
        public MyTask(Context context) {  
              
            //新建一个要发送的Intent  
            mcontext = context;  
            intent = new Intent();  
            intent.setAction(broadCastString);  
        }  
        @Override  
        public void run()  
        {  
            System.out.println("2");  
            //发送广播(由onReceive来接收)  
            mcontext.sendBroadcast(intent);  
        }  
          
    }  
}

Android桌面插件的开发相关推荐

  1. Android应用插件式开发解决方法[转]

    一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分 ...

  2. Android应用插件式开发解决方法

    一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分 ...

  3. Android之插件化开发

    个人认为: 2017年手淘Atlas插件化项目的开源标志着插件化的落幕, 2018年Android 9.0上私有API的限制几乎称得上是要退出历史主流. 如今的插件化技术朝两个方向发展: 其一,插件化 ...

  4. android 桌面插件 语录,一句话心情语录app

    一句话心情语录app是一个心情阅读软件,这里有着一句句优美的语言,用一段段真挚的语言来温暖你我的身心,一句真挚的话语,洗涤心灵的尘埃,带给你温暖的心语.一句充满知识.智慧和感情的话语,柔软.温暖,充满 ...

  5. android桌面小组件开发_快使用Scriptable自己开发一个iPhone小组件吧

    最近苹果的 iOS 系统升级到了 iOS 14,这次的更新我比较关注的就是升级的小组件功能,这次更新我们可以将小组件放置在主屏幕中的任何位置,可以让我们更加便捷的查看一些信息,从而省去了还需要打开AP ...

  6. android 桌面插件 语录,句子控桌面小插件-句子控APPv2.5.3 安卓版_永辉资源网

    句子控APP是一个便携的摘录,可以随时发布.收集.查找自己喜欢的句子:句子控制汇集了很多名言,经典句子,电影台词,歌词.同时,你也可以在这里找到和你相似的朋友! 句子控APP怎么样? 这款软件里面超多 ...

  7. 携程Android App插件化和动态加载实践

    转载自:http://www.infoq.com/cn/articles/ctrip-android-dynamic-loading?email=947091870@qq.com 编者按:本文为携程无 ...

  8. Android开发桌面插件

    前提:公司应用需要开发插件,奈何我实在没有块的开发经验,查阅了一些资料,花了几天时间,完成了插件的开发. 开发桌面插件需要了解AppWidgetProvider,RemoteViewsService, ...

  9. Android Widget 电池插件的开发实现

     最近突发奇想,想自己编一个Android电池插件放在桌面上,一是这个App确实有它的实用价值,二是编起来工程量应该不是很大,不用花太长时间,三来又能学习下Widget的开发方法,一举三得,于是,暂停 ...

  10. Android插件化开发之解决OpenAtlas组件在宿主的注冊问题

    Android插件化开发之解决OpenAtlas组件在宿主的注冊问题 OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主 ...

最新文章

  1. MicroPython支持的开发板:高性能、低成本创客首选
  2. 解决小米手机缩放窗口问题
  3. 图像孔洞填充与小连通域的删除
  4. Spring事务传递性探讨
  5. Q:一个经典的helloworld程序需要几个文件?
  6. troubleshoot之:分析OutOfMemoryError异常
  7. Cocos2D v2.0至v3.x简洁转换指南(一)
  8. city code table广东_专访 | 杨龙——第20届广东十佳服装设计师
  9. 带你自学Python系列(四):range、min、max、sum函数
  10. 机器学习- 吴恩达Andrew Ng - week3-2 Logistic Regression Model
  11. Java线程的6种状态、NEW、RUNNABLE、BLOCK、TIMED_WAITING、TERMINATED
  12. 笑哭了!日本网友求助如何卸载360浏览器,过程堪比“ 拆弹 ”.....
  13. 智能枕头里究竟藏有什么“智能”故事?
  14. 星号下三角形python答案_Python练习题:星号三角形
  15. 汉堡王什么汉堡好吃_汉堡王什么汉堡好吃?隐藏的点单攻略快来看
  16. Gephi安装教程及相关错误解决
  17. 1、Android概述
  18. 软件设计模式-观察者模式
  19. scala中case的用法
  20. 每股收益再创新高,增长速度趋于减缓:上市公司半年报业绩波澜不惊

热门文章

  1. 美国佐治亚理工计算机专业,世界大学排名之:美国佐治亚理工学院
  2. qp_查看表的数据是否更新了指定的某一天数据
  3. LeetCode:459.重复的子字符串 Python3 | 判断输入的字符串是不是可以由子串多次重复构成
  4. 忆我的大学老师----(一)
  5. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
  6. 世界杯开赛看球吃麻辣小龙虾
  7. 本世纪惊心动魄的粮食战争,中国反败为胜:陈思进--20190701
  8. Flixel横板游戏制作教程(三)— AddingWeapons
  9. linux服务器的外网IP查阅方式
  10. 有关微信小程序云数据库修改数据的坑