Android Запускаю стороннее приложение из моего собственного - PullRequest
0 голосов
/ 15 августа 2011

Я пытаюсь получить следующий код для выполнения:

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

По сути, я ищу способ специально нацелить и загрузить точное, оригинальное, домашнее приложение.

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Технически, у вас нет возможности всегда знать «точное, оригинальное, домашнее приложение».

Вы можете использовать PackageManager и queryIntentActivities(), чтобы найти, кто все отвечает на MAIN / HOME Intents.Если есть два ответа, а ваш - один (я полагаю, это ваша ситуация), тогда другой - «точное, оригинальное, домашнее приложение» в значительной степени по определению.Далее вы можете проверить это, перейдя к объекту ApplicationInfo, связанному с разрешенным действием, и проверив наличие FLAG_SYSTEM, чтобы увидеть, установлен ли он в образе системы.Этот подход, вероятно, не является полностью пуленепробиваемым, но он может быть достаточно близок к вашим потребностям.

Еще один вариант - просто записать текущую активность по умолчанию MAIN / HOME, когда вы запускаете дляпервый раз.Приличные шансы, что ваше приложение будет запущено до того, как пользователь выберет вас по умолчанию.Опять же, здесь есть дыры (например, они делают вас по умолчанию перед первым запуском).

0 голосов
/ 18 августа 2011

РЕДАКТИРОВАТЬ: РЕШЕНИЕ:

        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», а затем возвращает ее идентификатор.

...