0

Android用ランチャーアプリを開発しています。そのためには、利用可能なアクティビティに影響を与えるACTION_PACKAGE_REMOVED、ACTION_PACKAGE_CHANGEDなどのアクションでシステムブロードキャストの通知を受ける必要があります(私のアプリで表示される)ユーザーで起動します。Intent.ACTION_PACKAGE_CHANGED - アプリケーションコンポーネントのブロードキャストが受信できません

パッケージのインストール、パッケージの削除、パッケージの更新&パッケージの無効化/有効化はいつものように機能しますが、パッケージ全体が無効になっている場合などがあります。 Intent.ACTION_PACKAGE_CHANGEDというアクションを持つシステムブロードキャストが呼び出されますが、MyAndroidToolsなどのアプリケーションからアクティビティなどのアプリケーションコンポーネントが個別に無効になっている場合、ブロードキャスト受信者に通知されません。つまり、Intent.ACTION_PACKAGE_CHANGEDのブロードキャストはシステムからアプリケーションに届きません個々のアプリコンポーネントを無効にするためですここで

は、必要なインテントフィルタを持つ放送受信機の私のマニフェスト宣言です:

<receiver android:name=".LauncherBroadcastReceiver"> 
      <intent-filter android:priority="100"> 
       <action android:name="android.intent.action.PACKAGE_ADDED"/> 
       <action android:name="android.intent.action.PACKAGE_CHANGED"/> 
       <action android:name="android.intent.action.PACKAGE_REPLACED"/> 
       <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
       <data android:scheme="package" /> 
      </intent-filter> 
     </receiver> 

(アクティビティを言う)intentedとしてすべてが機能していますが、パッケージの全体は、とき、単一コンポーネント無効か有効ではない場合にのみ、無効または有効になっています。

いくつかの他のランチャーでテストをチェックしているので、いくつかの方法があります.1つのコンポーネントが無効になっていると、コンポーネントを有効にするためにランチャーの&にそのように反映されます(アプリケーションドロワーで消えます)。したがって、これらのランチャーは、この情報を受信して​​いるいくつかのリスナーまたはブロードキャストかもしれません。私の問題のため

答えて

0
`<receiver android:name=".LauncherBroadcastReceiver" exported="true" enabled="true">` 
+0

私のケースでは、両方の値がデフォルトで真となり、パッケージ全体の変更のインテントを受け取ることができるので、問題はありませんが、ヘルプに感謝します。 –

0

一つの可能​​性の溶液(理想的ではない)は、変更を反映するために活動onResumeメソッドでは、更新よりも無効に起動可能のactivitesのリストを取得することです。 (無効のものを含む)すべての起動可能な活動のための

  1. クエリパッケージマネージャ

    Intent mainLaunchIntent = new Intent(Intent.ACTION_MAIN); 
         mainLaunchIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
         mainLaunchIntent.addFlags(PackageManager.MATCH_DISABLED_COMPONENTS); 
         List<ResolveInfo> activitiesInformationList = packageManager.queryIntentActivities(mainLaunchIntent, 0); 
    
  2. のみ有効に起動可能な活動

    のためのクエリのパッケージマネージャ:無効な起動可能な活動のリストを取得するには

    Intent mainLaunchIntent = new Intent(Intent.ACTION_MAIN); 
         mainLaunchIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
         List<ResolveInfo> activitiesInformationList = packageManager.queryIntentActivities(mainLaunchIntent, 0); 
    
  3. リスト(1-2)障害のある活動のリストになります。私は同じことを試していないので、私にとって理想的ではないが、より多くの答えを待っていますが、一部の人が同じ有用なものを見つけた場合は、それを使用することができます。

関連する問題