android - 在华为设备上设置默认 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) ?
他们是否在华为设备上使用了其他意图操作?
预先感谢您的帮助。
解决方案
是的,在华为设备上,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 {
...
}
推荐阅读
- python - 将 IBM Cloudant 与 SQLAlchemy 结合使用
- java - 如何在 android studio 上为 Android Apk 文件生成 SHA512 校验和
- windows - .Net Core windows 身份验证,并在应用程序数据库中进行一些额外检查
- c++ - 跨解决方案项目共享 C++ 源文件以供模板使用
- jsf - javax.faces.webapp.FacesServlet 不能分配给 javax.servlet.Servlet , jakarta.servlet.Servlet
- nlp - 您如何确保节 CoreNLPClient 的可行端点?
- ruby-on-rails - Rails delay_job 要求不存在的文件
- node.js - 每次调用时出现 AWS Lambda 错误 EADDRINUSE
- angular - 如何在不使用 __zone_symbol__value 属性的情况下从 localStorage 检索值
- java - 用杰克逊注解“内联”一个对象