2017-05-08 84 views
0

我正在使用一项活动,并且某些逻辑需要不时启用和禁用此活动。另外,我使用包管理器API来检查系统中是否有此活动。这是getActivityInfo方法。getActivityInfo方法不适用于禁用组件

由于某种原因,我在调用此方法后捕获NameNotFoundException(如果此时活动被禁用)。这有点奇怪。这是一个功能还是我做错了什么?我知道我没有拼错包和活动名称,它们是有效的。

我不能使用MATCH_DISABLED_COMPONENTS标志sinse它只进入24级API,这是我禁止进入。 enter image description here

+0

好吧,您如何编程启用该活动仅用于查询,然后稍后将其禁用? –

+0

是的,但使用activityInfo的重点是确定是否启用此活动。 :) – Ov3r1oad

+0

我同意,但没有PackageManager支持库,所以这是一个破解它。此外,Android设计师的原创思想必须是“无论启用哪种方式都是有效的”。所以,ActivityInfo类随需求增长了,但你必须为你的情况提供更新的功能。 –

回答

1

编辑: 对于API级别24的问题,我可以建议编程实现了片刻的活动,然后负责进行调查,然后用禁用它,

setComponentEnabledSetting(ComponentName componentName, int newState, int flags) 

其状态:

组件的新启用状态。此 状态合法的值是:COMPONENT_ENABLED_STATE_ENABLED, COMPONENT_ENABLED_STATE_DISABLED和COMPONENT_ENABLED_STATE_DEFAULT 最后一个删除设置,从而恢复组件的 状态,无论是设置在它的清单(或启用,默认情况下)。


有在文档此方法和标志之一是提供MATCH_DISABLED_COMPONENTS标志。这意味着没有此标志,它不会检查任何禁用的组件,并且您必须为您的情况启用它。

所以这样称呼它,

getActivityInfo(componentName, MATCH_DISABLED_COMPONENTS); 

你应该再没有获得此例外。

+0

是的,说明听起来很合理。但是我不能使用24级API的问题。还有一件事:方法getApplicationInfo对禁用的包(没有任何标志)有效。也许它不一样,但对我来说仍然很奇怪。 – Ov3r1oad