Android桌面插件的开发
想要做个可以在桌面上显示的插件需要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桌面插件的开发相关推荐
- Android应用插件式开发解决方法[转]
一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分 ...
- Android应用插件式开发解决方法
一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分 ...
- Android之插件化开发
个人认为: 2017年手淘Atlas插件化项目的开源标志着插件化的落幕, 2018年Android 9.0上私有API的限制几乎称得上是要退出历史主流. 如今的插件化技术朝两个方向发展: 其一,插件化 ...
- android 桌面插件 语录,一句话心情语录app
一句话心情语录app是一个心情阅读软件,这里有着一句句优美的语言,用一段段真挚的语言来温暖你我的身心,一句真挚的话语,洗涤心灵的尘埃,带给你温暖的心语.一句充满知识.智慧和感情的话语,柔软.温暖,充满 ...
- android桌面小组件开发_快使用Scriptable自己开发一个iPhone小组件吧
最近苹果的 iOS 系统升级到了 iOS 14,这次的更新我比较关注的就是升级的小组件功能,这次更新我们可以将小组件放置在主屏幕中的任何位置,可以让我们更加便捷的查看一些信息,从而省去了还需要打开AP ...
- android 桌面插件 语录,句子控桌面小插件-句子控APPv2.5.3 安卓版_永辉资源网
句子控APP是一个便携的摘录,可以随时发布.收集.查找自己喜欢的句子:句子控制汇集了很多名言,经典句子,电影台词,歌词.同时,你也可以在这里找到和你相似的朋友! 句子控APP怎么样? 这款软件里面超多 ...
- 携程Android App插件化和动态加载实践
转载自:http://www.infoq.com/cn/articles/ctrip-android-dynamic-loading?email=947091870@qq.com 编者按:本文为携程无 ...
- Android开发桌面插件
前提:公司应用需要开发插件,奈何我实在没有块的开发经验,查阅了一些资料,花了几天时间,完成了插件的开发. 开发桌面插件需要了解AppWidgetProvider,RemoteViewsService, ...
- Android Widget 电池插件的开发实现
最近突发奇想,想自己编一个Android电池插件放在桌面上,一是这个App确实有它的实用价值,二是编起来工程量应该不是很大,不用花太长时间,三来又能学习下Widget的开发方法,一举三得,于是,暂停 ...
- Android插件化开发之解决OpenAtlas组件在宿主的注冊问题
Android插件化开发之解决OpenAtlas组件在宿主的注冊问题 OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主 ...
最新文章
- MicroPython支持的开发板:高性能、低成本创客首选
- 解决小米手机缩放窗口问题
- 图像孔洞填充与小连通域的删除
- Spring事务传递性探讨
- Q:一个经典的helloworld程序需要几个文件?
- troubleshoot之:分析OutOfMemoryError异常
- Cocos2D v2.0至v3.x简洁转换指南(一)
- city code table广东_专访 | 杨龙——第20届广东十佳服装设计师
- 带你自学Python系列(四):range、min、max、sum函数
- 机器学习- 吴恩达Andrew Ng - week3-2 Logistic Regression Model
- Java线程的6种状态、NEW、RUNNABLE、BLOCK、TIMED_WAITING、TERMINATED
- 笑哭了!日本网友求助如何卸载360浏览器,过程堪比“ 拆弹 ”.....
- 智能枕头里究竟藏有什么“智能”故事?
- 星号下三角形python答案_Python练习题:星号三角形
- 汉堡王什么汉堡好吃_汉堡王什么汉堡好吃?隐藏的点单攻略快来看
- Gephi安装教程及相关错误解决
- 1、Android概述
- 软件设计模式-观察者模式
- scala中case的用法
- 每股收益再创新高,增长速度趋于减缓:上市公司半年报业绩波澜不惊
热门文章
- 美国佐治亚理工计算机专业,世界大学排名之:美国佐治亚理工学院
- qp_查看表的数据是否更新了指定的某一天数据
- LeetCode:459.重复的子字符串 Python3 | 判断输入的字符串是不是可以由子串多次重复构成
- 忆我的大学老师----(一)
- Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
- 世界杯开赛看球吃麻辣小龙虾
- 本世纪惊心动魄的粮食战争,中国反败为胜:陈思进--20190701
- Flixel横板游戏制作教程(三)— AddingWeapons
- linux服务器的外网IP查阅方式
- 有关微信小程序云数据库修改数据的坑