Подтвердить что ты не робот

Запуск программы запуска по умолчанию для Android

Я ищу способ запуска программной установки Android по умолчанию, что-то вроде кода ниже. Или мне нужно добавить что-то в файл манифеста? Спасибо!

Intent intent = new Intent();
intent.setClassName("com.android.launcher", "Launcher");
startActivity(intent);
4b9b3361

Ответ 1

Вы пробовали это?

startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER));

(Я сам не пробовал, потому что мой вариант использования немного сложнее --- я заменил пусковую установку, и я хочу вызвать старую пусковую установку...)

Я также обнаружил, что вы можете использовать диспетчер пакетов, чтобы просмотреть все действия, соответствующие определенным критериям фильтра намерения. Например, если вы хотите найти все действия, помеченные как домашняя активность дома по умолчанию, используйте это:

Intent intent=null;
final PackageManager packageManager=getPackageManager();
for(final ResolveInfo resolveInfo:packageManager.queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY))
{
    if(!getPackageName().equals(resolveInfo.activityInfo.packageName))  //if this activity is not in our activity (in other words, it another default home screen)
    {
        intent=packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName));
        break;
    }
}

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

(Обратите внимание, что я все еще не могу запустить старую пусковую установку из моей пусковой установки, возможно, потому, что старая пусковая установка хранит запись о пусковой установке по умолчанию, которая является моей новой пусковой установкой, и просто обращается к ней. Я не знаю Но, по крайней мере, это не сбой, и я бы догадался, что, если вы не заменили старый домашний экран, это может сработать.)

Ответ 2

Следуя за ответом Гаррет Уилсон, здесь уродливый однострочный, предполагая, что context - это ваш контекст приложения:

context.startActivity(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME).setPackage(context.getPackageManager().queryIntentActivities(new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME), PackageManager.MATCH_DEFAULT_ONLY).get(0).activityInfo.packageName));

Этот код предполагает, что исходная домашняя активность системы всегда является первым результатом, возвращаемым queryIntentActivities, тогда как принятый ответ возвращает первую домашнюю активность, не принадлежащую запущенному пакету.

До сих пор неясно, как очистить домашнюю активность системы. В некоторых потоках упоминается, что для этого можно использовать getPackageManager().resolveActivity(intent, flags), но кажется, что PackageManager.MATCH_SYSTEM_ONLY не может использоваться с этим методом.