在华为设备上设置默认Android启动器?

时间:2019-01-06 07:49:30

标签: android android-intent huawei

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

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-可以改进!

我发现,当选择“->默认应用”菜单项时,启动了(com.android.settings,.SubSettings)意向(带有其他功能),但我无法使它起作用(拒绝权限)。

但是我安装了Nova Launcher,事实证明它能够在华为设备上显示“->默认应用”设置页面!
因此,用户登陆到一个页面,在该页面上,他/他只需要轻按“->默认启动器”,然后选择默认启动器即可:轻松得多。

2-问题:

我认为在华为设备上无法显示“ Lancher Picker”,这是我的问题:
如何在华为设备上显示“->默认应用”设置页面(如下图所示)(如Nova Launcher一样)?
他们在华为设备上使用其他意图动作吗?

预先感谢您的帮助。

enter image description here

2 个答案:

答案 0 :(得分:1)

是的,在华为设备上,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 {
    ...
}

答案 1 :(得分:0)

实际上,接受的答案不是100%正确,因为它打开了常规的默认应用选择器活动。

它可以工作,但是最好将用户权限带入启动器选择器活动-com.google.android.permissioncontroller/com.android.packageinstaller.role.ui.HomeSettingsActivity(至少对于Android 10 Huawei Honors是这样)。

因此,正确的代码段是:

Intent()
            .apply {
                component = ComponentName("com.google.android.permissioncontroller", "com.android.packageinstaller.role.ui.HomeSettingsActivity")
                addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
            }
            .takeIf {
                packageManager.resolveActivity(it, 0) != null
            }
            ?.let(context::startActivity)