Я попытался реализовать функциональность, которая позволяет пользователю выбирать приложение запуска по умолчанию для 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
, тогда я получу некоторыеобратный вызов, но приложение запуска не будет установлено вообще.Кроме того, в намерениях, полученных в 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
}
}
Это приводит к выбору по умолчанию, без опций "JUST ONCE" или "ВСЕГДА".У меня нет точной картинки, но она выглядит примерно так:
Это работает таким образом , вметод получателя onReceive
, который я получаю ComponenName
объект, который содержит выбранное приложение packageName
.Проблема - опять же - Приложение Launcher не установлено!
Так что вопрос: Как я могу позволить пользователю установить Приложение запуска, а также получить информацию, какую из них он выбрал?