Есть неочевидная ситуация: вы пишете лаунчер лончер или что-то его заменяющее, отдебажили, всё работало. Конечно же, вы поставили его как програму по умолчанию и теперь он стартует вместо дефолтого. И вдруг, вылезает некая бага, которая начинает крушить, бомбить ронять телефон, перезапуская приложение. Перезапустится, конечно же, то, что упало, а упал лончер. И он снова падает. Development mode в продакшене отключён. Ну вы поняли.
На самом деле бывают ситуации ещё хуже, например, для vendor lock-in приложений, которые вообще скрывают, что они работают под андроид.
Предвкушая первую мысль как вернуть дефолтный лончер: вызвать в приложении finish(). Чёрт, это же домашний экран %)
Intent intent = null;
final PackageManager packageManager = getPackageManager();
Intent launcherFilter = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME);
Collection<ResolveInfo> launchers = packageManager.queryIntentActivities(launcherFilter, PackageManager.MATCH_DEFAULT_ONLY);
for(ResolveInfo resolveInfo: launchers) {
if (!getPackageName().equals(resolveInfo.activityInfo.packageName)){
// Select first "home" app but not self
intent = packageManager.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
break;
}
}
if (intent != null) {
startActivity(intent);
finish();
}
Теперь есть backdoor для выхода "в систему" :)