gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:46 24 4
gpt4 key购买 nike

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

我们正在努力实现的是构建自定义 ROM,并在设备上预安装两个主屏幕。一个是标准的 Andoid“Launcher3”,另一个是我们自己的主屏幕应用程序“foobarhome”。到目前为止一切顺利:-)

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

问题:不幸的是,我们将在 GMS SetupWizard 完成后立即获得 ResolverActivity。
ResolverActivity 让我们在 Launcher3 和我们的主屏幕应用程序之间进行选择,我们必须手动选择我们的主屏幕应用程序(始终运行)。

目标:直接启动我们的家庭应用,中间没有 ResolverActivity。

准备:
在构建自定义 ROM 并执行所有我们和 Android 的 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 刚刚启动(选择语言页面)
--> 执行 adb "shell dumpsys package preferred-xml" 或在设备文件目录检查文件内容:data/system/users/0/package-restrictions.xml
--> 寻找 xml 节点 block :

<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
--> 可能的选择:

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

--> 再次检查设备中的 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: 有没有一种方法可以通过 aosp_root/frameworks/base/core/java/android/在 Settings.apk(packages/apps/Settings)中预选主屏幕应用程序content/res/Configuration.java.
这可能会解决问题吗?

Q2: 在设备上的 data/system/users/0/package-restrictions.xml 中,我们看到了两个由 Lollipop 引入的新 xml 节点(与 KitKat 相比)。 那些叫做 <persistent-preferred-activities /><crossProfile-intent-filters /> . 它们的用途和使用方法是什么? <persistent-preferred-activities /> 中子元素的语法是什么? ? 有关于它的公开可用的 android 文档吗?

主要问题:知道如何通过在初始设备启动/设置期间不获取 ResolverActiviy 来解决这个问题吗?

最佳答案

对于问题 1:我认为您可以像 ChooseActivity 那样做一些事情。关键是找到一个合适的时间在 Launcher 之前执行,据我所知,Provision 是执行此操作的最佳位置。您可以调用 PackageManager 携带的 addPreferredActivity()在 Provision 自身失效之前。

关于android - 在自定义 ROM 中进行初始设备设置/启动时同类的首选应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com