0

次のコードを実行しようとしています。

Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME);
intent.setComponent(new ComponentName(" **Home package** "," **Home class** "));
                  startActivity(intent);

基本的に、私は正確なオリジナルのホームアプリケーションを具体的にターゲットにしてロードする方法を探しています。

4

2 に答える 2

1

技術的には、「正確でオリジナルのホームアプリケーション」を常に知る方法はありません。

を使用PackageManagerして、すべての人が/queryIntentActivities()に応答する人を見つけることができます。2つの答えがあり、あなたの答えが1つである場合(私が推測しているのはあなたの状況です)、もう1つは、定義上、「正確でオリジナルのホームアプリケーション」です。解決されたアクティビティに関連付けられているオブジェクトにアクセスし、それがシステムイメージにインストールされているかどうかを確認することで、これをさらに確認できます。このアプローチはおそらく完全に防弾ではありませんが、ニーズに十分近いかもしれません。MAINHOME IntentsApplicationInfoFLAG_SYSTEM

さらに別のオプションは、初めて実行するときに現在のデフォルトMAIN/アクティビティを単に記録することです。HOMEユーザーがあなたをデフォルトにすることを選択する前に、アプリケーションが実行される可能性は十分にあります。繰り返しになりますが、これには穴があります(たとえば、初めて実行する前にデフォルトになります)。

于 2011-08-14T22:21:42.403 に答える
0

編集:解決策:

        PackageManager pm=getPackageManager();
        Intent main=new Intent(Intent.ACTION_MAIN, null);

        main.addCategory(Intent.CATEGORY_HOME);
        List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);

        Collections.sort(launchables,
                         new ResolveInfo.DisplayNameComparator(pm));

        int launcher_flag = findLauncherApp(launchables);

        ResolveInfo launchable = launchables.get(launcher_flag);

        ActivityInfo activity=launchable.activityInfo;
        ComponentName name=new ComponentName(activity.applicationInfo.packageName,
                                             activity.name);
        Intent i=new Intent(Intent.ACTION_MAIN);

        i.addCategory(Intent.CATEGORY_LAUNCHER);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        i.setComponent(name);

        startActivity(i);

ここで、findLaucherApp()はリストを文字列の配列に変換し、それぞれに「com.android.launcher2」が含まれているかどうかを確認して、そのIDを返します。

于 2011-08-17T21:29:21.627 に答える