上周五的时候领导分了一个任务,客户让在google开机向导里面增加一页,首先就想到了android的Overlay,然后网上搜了下,发下有很多人写了这方面的技术。而且写的都还不错,所以本篇只当记录作用吧,列下写的比较好的博客:

http://developer.sonymobile.com/2014/04/22/sony-contributes-runtime-resource-overlay-framework-to-android-code-example/

看情况大家应该都参考的这篇,英文好的可以看下。

Android 运行时资源替换—-Runtime Resource Overlay

既然原理别人都已经写好了,再写就有点浪费时间了,不懂的话可以参考上面两篇博客。

下面直接开始我这个功能的实现。

首先看下我们的基本思路,(解释一点 其实google的开机向导很多页面都来自不同的app)

1、所以我们先要找到把每一页整合到一起的配置文件,

2、找到这个配置文件后在相应的地方增加我们的页面配置。

后面的事就是编写UI之类的 根据需求来就可以了

1、查找配置文件

通过反编译工具可以把SetupWizard的资源文件反编译出来,android的配置文件一般都是xml文件 。所以到现在我们应该已经得到了SetupWizard的配置文件,这个配置文件具体是什么。请往下看。

通过sdk提供的hierarchyviewer工具我们可以得到SetupWizard每个页面的包名

注意到BluOOBEKeepActivity 和BluOOBEActiviy就是我添加的,先忽略掉它们,设置wifi的时候老是跳过 ,下面这张图是走到设置wifi界面的时候截的。

通过上图我们可以知道SetupWizard会走到Setting中去选择连接wifi的界面,别的包名看起来都是google的,google的应用我们一般都没源码,所以就以Settings的这个界面入手,

看Settings中AndroidManifest.xml关于WifiSetupActivity的配置

<activity android:name=".wifi.WifiSetupActivity"
                android:taskAffinity="com.android.wizard"
                android:theme="@style/SetupWizardDisableAppStartingTheme"
                android:label="@string/wifi_setup_wizard_title"
                android:icon="@drawable/empty_icon"
                android:clearTaskOnLaunch="true"
                android:windowSoftInputMode="adjustNothing">
            <intent-filter android:priority="1">
                <action android:name="com.android.net.wifi.SETUP_WIFI_NETWORK" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>

搜索这些信息发现SetupWizard的资源中并没有找到,很郁闷 ,没办法 唯一的思路不能断呀,只能一路查找它的父类 最后终于在WifiSettingsActivity 中找到了有用的信息

<action android:name="android.settings.WIFI_SETTINGS" />

打开这两个文件查看,基本类似的,只是一个多了user,不知道具体有什么差别,但是通过对比发现 它们基本一样 只是wizard_script比wizard_script_user多了好多页面,但是明显第一个有welcome的页面,第二个没有,所以最终决定在wizard_script添加我们的页面。

<WizardAction wizard:uri="intent:#Intent;action=android.settings.SET_BLUOOBEKEEP;end" id="blu_oobekeep">
        <result wizard:action="restore_check" />
    </WizardAction>

好了 经过比较蛋疼的查找后终于知道了要把新页面添加到什么地方, 接下来就是添加页面了。

2、最后也决定把这个页面写到Setting中,具体的内容的话就要看各个需求了。

Settings中AndroidManifest添加配置

  <activity android:name="com.android.settings.wifi.BluOOBEKeepActivity"
                  android:theme="@style/SetupWizardTheme.Light"
                  android:taskAffinity="com.android.wizard">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.SET_BLUOOBEKEEP" />
                <action android:name="android.settings.SET_BLUOOBE_NOT_ACCOUNTKEEP" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

源码

Android RRO机制的运用-----google开机向导客制化的更多相关文章

  1. MTK Android [输入法]客制化系统默认输入法-搜狗输入法

    1.frameworks/base/packages/SettingsProvider/res/values/defaults.xml <!--Sogou input method is use ...

  2. Android MTK平台 客制化系统来电界面(屏蔽 InCallUI 提供接口给客户自行展示来电去电页面)

    OS: Android 8.1 需求分析 1.禁止系统来电铃声,提供接口给客户自己播放铃声 2.禁止系统拉起来去电页面(InCallActivity),消息通知客户拉起自己的来去电页面 3.禁止来电消 ...

  3. Android MTK6580 客制化关机充电动画

    1.客制化关机充电图片 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/xxx 找到对应分辨率替换 2.调整显示图片位置.大小 ...

  4. Android不显示开机向导和开机气泡

    修改好的代码下载地址: https://github.com/Vico-H/Launcher 不显示开机向导 修改Launcher2.java的代码 (文件位置: /alps/packages/app ...

  5. Android广播机制的深入学习

    部分内容转载自http://www.cnblogs.com/lwbqqyumidi/p/4168017.html 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者 ...

  6. Android IPC机制之AIDL

    什么是AIDL AIDL:Android Interface Definition Language,即Android接口定义语言. Android系统中的进程之间不能共享内存,因此,需要提供一些机制 ...

  7. 理解Android安全机制

    本文从Android系统架构着手,分析Android的安全机制以SE Android,最后给出一些Android安全现状和常见的安全解决方案. 1.Android系统架构 Android采用分层的系统 ...

  8. 6.6 Android 编译机制的变迁

    我们使用Java开发android,在编译打包APK文件时,会经过以下流程 Java编译器将应用中所有Java文件编译为class文件(JVM运行的是.class文件,而DVM是.dex文件) dx工 ...

  9. Android内存机制分析1——了解Android堆和栈

    //----------------------------------------------------------------------------------- Android内存机制分析1 ...

随机推荐

  1. 如何用elementui去实现图片上传和表单提交,用axios的post方法

    下面是在vue搭建的脚手架项目中的组件component文件夹下面的upload.vue文件中的内容 <!--这个组件主要用来研究upload这个elementui的上传插件组件--> & ...

  2. 1.2WEB API 跨域

    详细请参考http://www.cnblogs.com/landeanfen/p/5177176.html 在项目上面使用Nuget安装 microsoft.aspnet.webapi.cors 在w ...

  3. [JCIP笔记](四)踩在巨人的肩上

    读完第三章那些繁琐的术语和细节,头疼了整整一个星期.作者简直是苦口婆心,说得我如做梦一般.然而进入第四章,难度骤然降低,仿佛坐杭州的过山公交车突然下坡,鸟鸣花香扑面而来,看到了一片西湖美景. 从开始看 ...

  4. Java基础学习(四)-- 接口、集合框架、Collection、泛型详解

    接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写.   二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...

  5. Java中List集合的三种遍历方式(全网最详)

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍. 我总结了三种List集合的遍历方式,下面一一来介绍. 首 ...

  6. Java程序优化之替换swtich

    关键字switch语句用于多条件判断,功能类似于if-else语句,两者性能也差不多,不能说switch会降低系统性能.在绝大部门情况下,switch语句还是有性能提升空间的. 但是在项目代码中,如果 ...

  7. LAMP+Wordpress搭建博客

    作为一名技术控,看到别人都有专属于自己的博客,小夜也忍不住自己操刀做个自己的博客.有兴趣的童鞋接下来可要认真地练习比对哦.如果出现错误也不要着急上火,咱们可以交流学习.我们的口号是:遇水搭桥,遇山凿山 ...

  8. [ABP]浅谈模块系统与 ABP 框架初始化

    在 ABP 框架当中所有库以及项目都是以模块的形式存在,所有模块都是继承自AbpModule 这个抽象基类,每个模块都拥有四个生命周期.分别是: PreInitialze(); Initialize( ...

  9. 用js来实现那些数据结构07(链表01-链表的实现)

    前面讲解了数组,栈和队列.其实大家回想一下.它们有很多相似的地方.甚至栈和队列这两种数据结构在js中的实现方式也都是基于数组.无论增删的方式.遵循的原则如何,它们都是有序集合的列表.在js中,我们新建 ...

  10. [NOI 2010]超级钢琴

    Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙 的音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙 ...