首页 > 解决方案 > 在华为设备上设置默认 Android 启动器?

问题描述

我的目标是在华为设备上将我的应用程序设置为默认启动器。

1 - 说明:

1.1 - 现状:

我已经能够:

这一切都很好..除了华为设备!

从我的角度来看,华为的 Android 风格并没有正确地“尊重”“ACTION_MANAGE_DEFAULT_APPS_SETTINGS”意图操作合同。

// this displays the list of default apps on all tested devices, except on Huawei devices!
// instead, it does display apps permissions, app links and apps'advanced settings
intent.setAction(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS);
activity.startActivity(intent);

作为 B 计划,我可以使用以下方式显示“应用程序和通知”设置“页面”:

String packageName = "com.android.settings";
String className = "Settings$AppAndNotificationDashboardActivity";
intent.setClassName(packageName, packageName + "." + className);
activity.startActivity(intent);

所以用户可以从那里导航,按下这个菜单项序列:

这需要我想避免的 2 或 3 个步骤。

1.2 - 这可以改进!

I found out that when the "-> Default Apps" menu item is selected, a (com.android.settings, .SubSettings) Intent (with extra) is launched but I was not able to make this works (permission denial).

但是我安装了Nova Launcher,结果发现它能够在华为设备上显示“-> 默认应用”设置页面!
因此,用户登陆一个页面,她/他只需点击“-> 默认启动器”,然后选择一个默认启动器:更容易。

2 - 问题:

由于我认为在华为设备上无法显示“Lancher Picker”,这是我的问题:
如何在华为设备上显示“-> 默认应用程序”设置页面(如下图)如 Nova Launcher) ?
他们是否在华为设备上使用了其他意图操作?

预先感谢您的帮助。

在此处输入图像描述

标签: androidandroid-intenthuawei-mobile-services

解决方案


是的,在华为设备上,Nova 使用不同的意图打开到正确的屏幕。我可能通过在从华为设备中提取的 Settings.apk 上使用 apktool 并查看 AndroidManifest 发现了这一点。请注意,“com.android”始终是代码异味,因为这意味着它不是公共 API 的一部分。这甚至不是真正的“com.android”,因为它在 AOSP 上不存在,com.android.settings.PREFERRED_SETTINGS纯粹是华为的发明。一些华为设备很可能根本没有这个。也有可能在未来,这种意图可能会继续起作用,但不会像现在这样。所以要小心处理。

/* Some Huawei devices don't let us reset normally, handle it by opening preferred apps */
Intent preferredApps = new Intent("com.android.settings.PREFERRED_SETTINGS");
preferredApps.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
if (pm.resolveActivity(preferredApps, 0) != null) {
    context.startActivity(preferredApps);
} else {
    ...
}

推荐阅读