Я попытался реализовать функциональность, которая позволяет пользователю выбирать приложение запуска по умолчанию для Android по умолчанию. Также мне нужно получить информацию, какое приложение было выбрано. Но есть проблема с этим подходом.
Чтобы позволить пользователю выбрать Launcher Application, мы можем просто запустить заданное намерение:
val selector = Intent(Intent.ACTION_MAIN)
selector.addCategory(Intent.CATEGORY_HOME)
selector.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(selector)
Это приводит к такому диалогу:
То, что я заметил, если я использую startActivity
, приложение Launcher настроено красиво и работает как задумано, но если я использую startActivityForResult
, я получу некоторый обратный вызов, но приложение Launcher не будет установлено вообще. Также не было ничего интересного в намерениях, полученных в onActivityResult
.
Затем я попытался использовать IntentSender.
Код выглядит следующим образом:
val selector = Intent(Intent.ACTION_MAIN)
selector.addCategory(Intent.CATEGORY_HOME)
selector.flags = Intent.FLAG_ACTIVITY_NEW_TASK
val receiver = Intent(this, MyBroadcastReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT)
val chooser = Intent.createChooser(selector, "Select a Home app", pendingIntent.intentSender);
startActivity(chooser)
Приемник выглядит следующим образом:
class MyBroadcastReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val componentName = intent.extras.getParcelable<ComponentName>(Intent.EXTRA_CHOSEN_COMPONENT)
//com.example.myapp if my app was choosen
val pkg = componentName.packageName
}
}
Это приводит к выбору по умолчанию, без параметров "ТОЛЬКО ОДИН РАЗ" или "ВСЕГДА". У меня нет точной картины, но она выглядит примерно так:
Это работает таким образом, что в методе приемника onReceive
я получаю объект ComponenName
, который содержит выбранное приложение packageName
. Проблема - снова - Приложение запуска не установлено!
Итак, вопрос: как я могу позволить пользователю устанавливать приложение запуска, а также получать информацию, какую он выбрал?