Android startActivity base launcher
Использую приложение как LAUNCHER установив в манифесте
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.CAR_MODE" />
<category android:name="android.intent.category.CAR_DOCK" />
<category android:name="android.intent.category.MONKEY"/>
<category android:name="RUN_AT_BOOT" />
</intent-filter>
Но хочу дать возможность выйти в базовый лаунчер операционки, поблуждав по недрам интернета нашел такой вот вызов перехода
val launchIntent = packageManager.getLaunchIntentForPackage("com.android.launcher")
launchIntent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(launchIntent)
где "com.android.launcher" - то что мне вернул проверочный код, который я так же нашел в сети
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_HOME)
val resolveInfo = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY)
val currentHomePackage = resolveInfo!!.activityInfo.packageName
Log.d("currentHomePackage", currentHomePackage)
Но как я понимаю тот же "com.android.launcher" возвращает именно установленный как HOME класс активности. Может кто подскажет как вызвать тот самый, родной лаунчер по запросу?
Ответы (1 шт):
Всё несколько сложнее.
com.android.launcher - это launcher AOSP, но на устройстве "родным" он может и не быть. Производители аппаратов предустанавливают собственные оболочки, юзеры в свою очередь ставят сторонние.
Итого: вам нужно как-то узнать кто был дефолтным до вас (не представляю как это сделать), либо дать юзеру выбрать из списка всех, что есть в системе:
val intent = Intent(Intent.ACTION_MAIN)
intent.addCategory(Intent.CATEGORY_HOME)
startActivity(Intent.createChooser(intent, "Title for chooser"));
https://developer.android.com/training/basics/intents/sending#AppChooser).
Если же вы хотите ещё и снять умолчание со своего приложения: https://developer.android.com/reference/android/content/pm/PackageManager#clearPackagePreferredActivities(java.lang.String)
Когда умолчание снято, то при запуске интента MAIN/HOME или нажатии кнопки home будет предложен выбор.