問題

通常のgetPackageManager().getLaunchIntentForPackage("com.example.app")の方法ではなく、自分で起動インテントを作成したいと思います。

 Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setPackage("com.example.app");
startActivity(intent);
 

com.example.appがインストールされ、有効になっていて正しいマニフェストがある場合、Androidがアクティビティを見つけられないのはなぜですか? (getLaunchIntentForPackageで完全に動作します)。

  ベストアンサー

既知のパッケージ名(com.example.app)を持つ既知のアプリケーションのLauncherアクティビティを開始しようとしていることを理解しています。私はあなたがアプリケーションに関する情報を持っていると仮定します。したがって、次のように明示的な意図で開始できます。

 Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.app", "com.example.app.MainActivity"));
if(intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}
 

編集:2つのインテントオブジェクト(intent1 ==自分のインテントVS intent2 == getLaunchIntentForPackage()から作成されたインテント)の分析を行うと、違いは

インテント1:

{act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] pkg = com.example.app}

インテント2:

{act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x1000000 pkg = com.example.app cmp = com.example.app/.MainActivity}

あなた自身の意図オブジェクトを作成するために行ったことは、明示的な意図が機能するのに十分ではないと信じなければなりません。上記の私の答えに示すように、コンポーネント名に固有のものなど、あなたの意図に関するAndroidの詳細情報を提供する必要があります。

  同じタグがついた質問を見る

androidandroid-intentandroid-package-managers