2017-05-08 36 views
0

私は1つのアクティビティで作業していますが、特定のロジックでは、このアクティビティを時々有効化および無効化する必要があります。また、パッケージマネージャAPIを使用して、システム内にこのアクティビティがあるかどうかを確認しました。これはgetActivityInfoメソッドです。無効なコンポーネントに対してgetActivityInfoメソッドが機能しません

そして、何らかの理由で、その時点でアクティビティが無効になっている場合、このメソッドを呼び出した後、私はNameNotFoundExceptionをキャッチします。それはちょっと変です。それは機能ですか、何か間違っていますか?私はパッケージ名とアクティビティ名のスペルを間違えていないことを知っています。

私はMATCH_DISABLED_COMPONENTSフラグを使用できません。これは、私にとって禁止されている24レベルのAPIでのみ入力されています。 enter image description here

+0

さて、お問い合わせのためだけにアクティビティをプログラムで有効にして、後でそれを無効にする方法はありますか? –

+0

はい、activityInfoを使用することの全体的なポイントは、このアクティビティが有効かどうかを判断することでした。 :) – Ov3r1oad

+0

私は同意しますが、PackageManagerのためのサポートライブラリはありませんので、これはその周りにハックです。また、Androidデザイナーの元々の考え方は、「有効になっているものはどれも効果的です」と考えられていたに違いありません。したがって、ActivityInfoクラスは要件を満たすようになりましたが、あなたの場合には新しい機能を追加する必要があります。 –

答えて

1

EDIT: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を使用することはできません問題。さらにもう1つの方法:メソッドgetApplicationInfoは無効なパッケージ(フラグなし)で有効です。たぶんそれは同じではありませんが、それでも私にとっては不思議です。 – Ov3r1oad

関連する問題