2017-05-08 6 views
0

하나의 작업으로 작업하고 있으며 특정 논리에서는 수시로이 작업을 활성화 및 비활성화해야합니다. 또한 패키지 관리자 API를 사용하여 시스템에이 활동이 있는지를 확인했습니다. 이것은 getActivityInfo 메소드입니다.getActivityInfo 메서드가 비활성화 된 구성 요소에 대해 작동하지 않습니다.

그리고 그 순간에 활동이 비활성화 된 경우이 메서드를 호출 한 후 어떤 이유로 NameNotFoundException을 catch합니다. 그것은 다소 이상합니다. 그것은 기능입니까 아니면 내가 잘못하고있는 것입니까? 패키지 이름과 활동 이름의 철자가 틀리지 않았 음을 알고 있습니다.

나는 MATCH_DISABLED_COMPONENTS 플래그를 사용할 수 없다. 그것은 나를 위해 금지 된 24 레벨 API에서만 입력되었다. enter image description here

+0

자, 이제 프로그래밍 방식으로 문의 활동을 활성화하고 잠시 후 사용하지 않도록 설정하는 것이 어떻습니까? –

+0

예,하지만 activityInfo를 사용하는 요점은이 활동이 활성화되어 있는지 여부를 결정하는 것이 었습니다. :) – Ov3r1oad

+0

동의하지만 PackageManager에 대한 지원 라이브러리가 없으므로이 패키지는 해킹입니다. 또한 안드로이드 디자이너의 원래 생각은 "무엇이 가능 하든지 유효하게 유효하다"였을 것입니다. 따라서 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