这是安卓系统移植开发--Launcher3在桌面上添加默认的appWidget

为什么有这篇文章

Launcher3相对于Launcher2改变了很多,网上大部分的资料也是说的4.4版本以前的Launcher2,按照以前Launcher2的修改方式对Launcher3是无效的,比如本文要讲述的在桌面添加appWidget.

上正题

Launcher3桌面的加载过程

Launcher3在首次安装的时候,会检查是否存在相对应的数据库launcher.db,如果不存在,就会从布局文件default_workspace_xxx.xml加载。如果数据库存在,就不会再加载xml文件了。

下面以default_workspace_4x4.xml为例,如下:

launcher:screen="0"

launcher:x="0"

launcher:y="0"

launcher:spanX="2"

launcher:spanY="2">

launcher:packageName="com.android.alarmclock"

launcher:className="com.android.alarmclock.AnalogAppWidgetProvider" /> />

HotSeat是可以生效的,但是appWidget不显示,尝试了很多种方式,都不行。

解决思路

前面说了,Launcher3在启动时会把数据加载到数据库中,既然在xml配置文件中不起作用,那么很可能是没有加载到数据库,我导出了数据库,一看,果然没有。

既然不能自动加载,那么我们是不是可以手动插入一条数据呢?尝试了一下,是行得通的。

方案代码

步骤一

workspace的展示需要两个重要的过程,loadWorkspace()和bindWorkspace(),顾名思义分别是加载workspace需要的数据和数据与workspace的位置绑定的两个方法。这两个过程在LauncherModel.java文件中。我们需要在loadWorkspace()方法中把数据添加进去。具体在哪个位置呢?在loadWorkspace()方法有一行

LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary();

的后面。

代码:

LauncherAppState.getLauncherProvider().loadDefaultFavoritesIfNecessary();

//在这里进行添加--bianjb

//在这里添加一条数据,应该可以的--bianjbLauncherProvider.DatabaseHelper helper = new LauncherProvider.DatabaseHelper (context);

SQLiteDatabase db = helper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("_id", 5);//id号

values.put("container", -100);//窗口,workspace是-100

values.put("cellX", 0);//x坐标

values.put("cellY", 0);//y坐标

values.put("spanX", 4);//x扩展

values.put("spanY", 4);//y扩展

values.put("itemType", 4);//类型为4,根据你要添加的进行调整

//appWidgetProvider也是需要要添加哪个widget进行调整

values.put("appWidgetProvider", "com.android.deskclock/com.android.alarmclock" + ".DigitalAppWidgetProvider");

values.put("modified", 0);//上一次修改时间,可以不写

values.put("restored", 0);

values.put("profileId", 0);

values.put("rank", 0);

values.put("options", 0);

long insert = db.insert(LauncherProvider.TABLE_FAVORITES, null, values);

db.close();

Log.e("LauncherModel", insert > 0 ? "插入成功" : "插入失败");

步骤二

注意了,这里我们使用了DataBaseHelper来创建数据库,这个类是LaucherProvider的内部类,源代码中是private,所以我们还需要修改该类为public

步骤三

因为我们手动添加到数据库,在加载过程中会检查是否有对应的screenId,而此时保存screenId的集合是空的。这部分检查代码是由LauncherModel的checkItemPlacement()方法来完成的,仔细阅读代码就会发现,真正保存screenId的集合是由一个变量叫做sBgWorkspaceScreens的变量保存,我们只需要在checkItemPlacement方法调用前为它手动添加一个长整形0L,就可以了。

第一次写的文章,写得不太好,有什么问题,欢迎留言交流!

android launcher 调用 widget,Launcher3添加桌面appWidget相关推荐

  1. Android 开机自动运行和添加删除桌面快捷方式

    <一>开机自启动 当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_C ...

  2. android 9.0 10.0 Launcher3添加负一屏(左一屏)功能

    1.概述 在10.0的系统产品开发中,要实现负一屏功能,而在8.1以前的版本中,都带有负一屏功能,但是在9.0以后就被取消掉了,由于客户需要只能参考8.1来实现负一屏功能了 效果图: 2.Launch ...

  3. android launcher桌面数字时钟及appwidget更新问题

    代码下载http://download.csdn.net/detail/ldinvicible/5010177 一.桌面数字时钟控件效果图 二. 1.准备好一个Widget的显示布局文件 layout ...

  4. Android Launcher开发(五)添加应用程序桌面快捷方常见问题及解决方案

    最近做到的应用做刚好需要添加快捷方式的功能, 在参考了源代码和网上一些其他资料后做了出来. 在做的时候遇到两个问题, 一.  程序卸载后桌面快捷方式仍然存在: 关于此问题, 网上的资料和实际中很多应用 ...

  5. android 添加桌面快捷方式

    .在桌面创建快捷方式方法: 方法一:通过长按某一个应用程序的图标在桌面上创建启动该应用程序的快捷方式. 这个方法安装完程序都用户都能实现. 方法二:在应用程序中构建一个Intent,然后以Broadc ...

  6. android 音量调节框,「Best Volume Widget」手机桌面独立音量调节小工具 (Android)...

    智能型手机的音量控制工具,通常都埋在设置菜单的「音效」中,每每需要时至少得点击四次才能进入调整音量,当然也可以直接按手机的实体音量控制键,不过要是在原本就安静的环境下想玩个游戏或看个影片,先将媒体音量 ...

  7. Android 桌面工具,安卓怎样添加桌面工具

    桌面工具(Widget)是Android系统的一大特色,通过桌面工具可以快速得到所需的信息,不必打开程序即可了解最新的内容.Android系统自带了一些常用的桌面工具,其他一些经过定制的系统也带有具有 ...

  8. Android Launcher 界面添加未接来电 / 未读短信条数显示

    原文首发地址 Android Launcher 界面添加未接来电 / 未读短信条数显示 本文代码基于 Android 6.0(高通),原生不支持未接来电以及未读短信的图标右上角数目显示. 涉及到几个文 ...

  9. android 小米launcher源码,Launcher3仿小米桌面

    刚开始弄这个的时候 没有一点头绪 ,后来看到4.4 跟5.1的源码有这个方法 ,刚开始尝试是把4.4的Launcher移植到6.0版本,编译报错,版本差别太大了.之后拿到5.1的源码尝试编译 通过了, ...

最新文章

  1. Vofuria 的 imageTarget 的图片无法显示或者显示为空白
  2. 数据库管理专才四步走
  3. 一步一步学linq to sql(二)
  4. 0330Cache Buffers chains与共享模式疑问
  5. java 下载图片 弹出框_javaweb多图片打包下载,弹出提示框问题_html/css_WEB-ITnose
  6. html图片红叉,ireport 用html页面上 图片怎么都出不来 全是红叉的处理办法
  7. python图形绘制糖_不给糖果就捣乱,用Python绘制有趣的万圣节南瓜怪!
  8. 聚焦IT系统稳定性保障服务 PerfMa笨马网络完成亿元级B轮融资
  9. keytool 错误:Keystore was tampered with, or password was incorrect
  10. C语言的飞机订票系统
  11. C++打印乘法口诀表
  12. 分享《生死狙击2》的大场景草渲染
  13. linux 文件大小写敏感,大小写敏感的问题
  14. Unity 之 查看Android手机实时日志
  15. 手牵手教你写 Vue 插件
  16. java编写桌球游戏素材小球图片_小球图片_小球模板_小球设计素材下载
  17. 数据挖掘-实战记录(四)Echarts可视化
  18. drupal mysql配置_安装配置Apache+php+mysql+drupal
  19. 人脸图像质量评价 SER
  20. IDEA2021启动报错Your JRE: 11.0.10+9-b1341.41 amd64 (JetBrains s.r.o.)\jbr libpng warning: iCCP: cHRM

热门文章

  1. ios 安卓 java_java转android或ios?
  2. spring-bean生命周期
  3. 小型电子商务网站设计原则
  4. 孩子做作业用计算机,小学五年级写作业让用计算机吗
  5. Joomla远程代码执行漏洞分析小白版(小宇特详解)
  6. Neo4J 与 Cypher 查询语言基础
  7. RTKLib的Manual基础解读
  8. 事理图谱:事件演化的规律和模式
  9. JavaWeb学习第二十七天——项目实例
  10. 旭智泓添携手天使妈妈慈善基金会—用爱播种希望!