我可以在清单(对于 api < 27)和运行时(对于 API 27+)中注册自定义意图吗?

Posted

技术标签:

【中文标题】我可以在清单(对于 api < 27)和运行时(对于 API 27+)中注册自定义意图吗?【英文标题】:Can I register a custom intent both in manifest (for api < 27) and at runtime (for API 27+)? 【发布时间】:2020-02-25 19:36:14 【问题描述】:

问题是,我可以同时注册清单和运行时自定义意图吗?还是被禁止或不赞成? 我的应用同时针对 API 21 和 API27+,如果可能的话,我不希望有 2 个清单(无论是否注册意图)。

【问题讨论】:

【参考方案1】:

您可以在 Manifest 和运行时注册相同的 BroadcastReceiver,但这可能没有意义。

为了使您的应用程序在 API 21 和最新的 android 版本上都能运行,我建议您删除 Manifest 声明的接收器并在运行时注册它,例如在前台服务或 Activity 中(实际上取决于你想要达到的目标)。这样,无论您的 Android 版本如何,您都会收到Intent

顺便说一句,如果您保留 Manifest 声明的接收器并在运行时注册BroadcastReceiver,则在发送匹配的广播时接收器将被调用两次。

【讨论】:

你确定它会被调用两次吗?这不是我现在正在经历的行为。另外,如果我没有在 API21 的清单中注册它,我不会得到它。 我在 API 24 上对其进行了测试(在行为改变之前),如果我在 Manifest 和 Activity 中注册了一次相同的接收器,它将被触发两次(只要 Activity 是运行)。

以上是关于我可以在清单(对于 api < 27)和运行时(对于 API 27+)中注册自定义意图吗?的主要内容,如果未能解决你的问题,请参考以下文章

为容器安全苦恼?这份清单列举了27种容器安全工具

我可以通过java代码添加facebook appId而不是添加清单(API 4)

Android 和 Eclipse:更改应用程序 API 级别

MainActivity 运行时未启动 [重复]

如何使用api 14显示权限请求

运行 java jar - 没有主清单属性错误