ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

android – 在自定义ROM中初始设备设置/启动时的同类应用程序的首选应用程序

2019-07-11 16:23:41  阅读:478  来源: 互联网

标签:android configuration startup homescreen


我们正在使用最新版本的Lollipop构建我们自己的AOSP /自定义ROM.

我们试图建立的是在设备上预装两个主屏幕来构建自定义ROM.
一个将是标准的Andoid“Launcher3”,另一个是我们自己的主屏幕应用程序“foobarhome”.到现在为止还挺好 :-)

我们当前的初始设备启动阶段大致如下:
– 设备启动动画
– GMS SetupWizard(Wi-Fi,语言,Google帐户设置等)
****设备达到设置完成状态****
– ResolverActivity开始显示我们自己的家庭应用程序“foobarhome”和Launcher3(>> BAD GUY<<)之间的选择
– 我们必须选择“foobarhome”来运行“always”
– 我们的主屏应用程序已启动并正在运行

问题:不幸的是,我们将在GMS SetupWizard完成后立即获得ResolverActivity.
ResolverActivity让我们在Launcher3和我们的主屏幕应用程序之间进行选择,我们必须手动选择我们的家庭应用程序(始终运行).
目标:直接启动我们的家庭应用程序,中间没有ResolverActivity.

水面浮油:
在构建自定义ROM并执行我们所有的Androids make文件时,我们将所谓的preferred-activities-home.xml复制到设备上的system / etc / preferred-apps /.

在我们的whatever.mk中,我们有以下代码行:
首选应用设置:

PRODUCT_COPY_FILES += \
    myLocalPath/preferred_activities/preferred-activities-home.xml:system/etc/preferred-apps/preferred-activities-home.xml

这些preferred-activities-home.xml的内容如下所示:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<preferred-activities>
    <item name="com.example.foobarhome/.MainActivity" match="100000" set="2">
        <set name="com.android.launcher3/com.android.launcher3.Launcher" />
        <set name="com.example.foobarhome/.MainActivity" />
        <filter>
            <action name="android.intent.action.MAIN" />
            <cat name="android.intent.category.HOME" />
            <cat name="android.intent.category.DEFAULT" />
        </filter>
    </item>
</preferred-activities>

您可能知道frameworks / base / services / core / java / com / andoid / server / pm / PackageManagerService.java和./Settings.java类正在处理此类配置.

我们的分析:
1)GMS SetupWizard刚刚启动(选择语言页面)
   – &GT执行adb“shell dumpsys package preferred-xml”或在设备文件dir上检查文件内容:data / system / users / 0 / package-restrictions.xml
   – &GT寻找xml节点块:

<preferred-activities> ... </preferred-activities>

我们的输出是:

<item name="com.example.foobarhome/.MainActivity" match="100000" always="true" set="4">
    <set name="com.android.settings/.CryptKeeper" />
    <set name="com.google.android.setupwizard/.SetupWizardActivity" />
    <set name="com.example.foobarhome/.MainActivity" />
    <set name="com.android.launcher3/com.android.launcher3.Launcher" />
    <filter>
        <action name="android.intent.action.MAIN" />
        <cat name="android.intent.category.HOME" />
        <cat name="android.intent.category.DEFAULT" />
    </filter>
</item>

2)GMS SetupWizard完成,SetupWizard UI消失,并显示ResolverActivity
   – &GT可能的选择:

  Use foobarhome as HOME
  buttons "always" and "just once"
  --------------------------------
  Use a different app
  Launcher3

– &GT再次检查设备中的package-restrictions.xml文件
  输出是:

<item name="com.example.foobarhome/.MainActivity" match="100000" always="false" set="0">
    <filter>
        <action name="android.intent.action.MAIN" />
        <cat name="android.intent.category.HOME" />
        <cat name="android.intent.category.DEFAULT" />
    </filter>
</item>

为什么Launcher3迷路了呢?

3)在选择我们的foobarhome应用程序以便总是运行之后,我们再次检查package-restrictions.xml并且看到 – 我们期望在GMS SetupWizard完成之后看到它.
输出是:

<item name="com.example.foobarhome/.MainActivity" match="100000" always="true" set="2">
    <set name="com.example.foobarhome/.MainActivity" />
    <set name="com.android.launcher3/com.android.launcher3.Launcher" />
    <filter>
        <action name="android.intent.action.MAIN" />
        <cat name="android.intent.category.HOME" />
        <cat name="android.intent.category.DEFAULT" />
    </filter>
</item>

通常,这些preferred-activities.xml方法可以工作,但不知何故它在初始设备启动/设置期间不起作用.
我们想知道为什么我们在去ResolverActivity的途中松开了package-restrictions.xml中的第二个家庭应用程序(Launcher3).

问题:
Q1:有没有办法在Settings.apk(packages / apps / Settings)中预先选择一个主屏幕应用程序,可能是通过aosp_root / frameworks / base / core / java / android / content / res / Configuration.java.
这可能解决了这个问题吗?

Q2:在data / system / users / 0 / package-restrictions.xml中的设备上,我们看到了Lollipop引入的两个新的xml节点(与KitKat相比).
    这些被称为< persistent-preferred-activities />和< crossProfile-intent-filters />.
    它们是什么以及如何使用?
    < persistent-preferred-activities /&gt ;?中子元素的语法是什么?
    关于它的任何公开可用的android文档?

主要问题:如果我们在初始设备启动/设置期间没有获得ResolverActiviy,我们怎能解决这个问题?

解决方法:

对于Q1:我认为你可以像ChooseActivity那样做.关键是要在Launcher之前找到合适的执行时间,我知道,Provision是最好的地方.
你可以调用PackageManager携带的addPreferredActivity()
在供应禁用之前.

标签:android,configuration,startup,homescreen
来源: https://codeday.me/bug/20190711/1433942.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有