Как запустить приложение с помощью значка запуска и голосового помощника, не создавая дублирующих действий?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как запустить приложение с помощью значка запуска и голосового помощника, не создавая дублирующих действий?

Сообщение Anonymous »

Я разрабатываю средство запуска Android, и мне нужно запускать приложения двумя разными способами:
  • С помощью значка средства запуска.< /li>
    С помощью специального голосового помощника.
Для этого у меня есть следующие требования:
  • Когда приложение запускается через голосовой помощник, любой существующий экземпляр должен быть закрыт, а новый экземпляр должен запускаться с новым состоянием.
  • Когда приложение запускается с помощью значка панели запуска, оно должно возобновить работу из предыдущего состояния даже после возврата в панель запуска.
Текущий код работает должным образом для запуска и перезапуска приложения (в настоящее время тестируется поведение запуска приложения с конкретным приложением) с помощью значка средства запуска: он возобновляет работу приложения без создания дублирующих действий. Однако возникает проблема при запуске приложения через голосовой помощник и последующем его перезапуске со значка запуска. В этом сценарии в той же задаче создается новый экземпляр действия приложения, что приводит к дублированию действия.
  • Запуск с помощью значка запуска:

    Запуск с помощью значка запуска:

    li>

Код: Выделить всё

@Override
public void onClick(View v) {
String packageName = getPackageNameFromReference(v);
Intent intent = manager.getLaunchIntentForPackage(packageName);
startApp(intent);
}

private void startApp(Intent intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
try {
getContext().startActivity(intent);
} catch (ActivityNotFoundException | IllegalArgumentException e) {
Toast.makeText(getContext(), "Error launching application " + packageName(), Toast.LENGTH_LONG).show();
}
}
  • Запуск с помощью голосового помощника:

Код: Выделить всё

private fun createStartAppIntent(): Intent {
val i = App.instance.packageManager
.getLaunchIntentForPackage(IntentConstants.TV_PACKAGE_NAME)
?: throw NullPointerException("Cannot create intent for starting TV app")

return i.apply {
addCategory(Intent.CATEGORY_LAUNCHER)
type = IntentConstants.TV_MIME_TYPE
flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
action = IntentConstants.ACTION_COMMAND
}
}
Журналы
Сценарий 1: запуск с помощью значка запуска и повторное открытие с помощью значка запуска (работает как положено)

Код: Выделить всё

D TV SplashScreen onCreate(), obj: SplashScreen@65bfa52, taskId: 48493
D TV PlayerActivity onCreate(), obj: PlayerActivity@1819d2c, taskId: 48493
D TV SplashScreen onDestroy(), obj: SplashScreen@65bfa52, taskId: 48493
D Launcher StartActivity onStart(), obj: StartActivity@6a0d381, taskId: 48491
D Launcher MainActivity onNewIntent(), obj: MainActivity@7654ed4, taskId: 48492
Сценарий 2: Запуск с помощью голосового помощника и повторное открытие с помощью значка запуска (создает повторяющееся действие)

Код: Выделить всё

D TV SplashScreen onCreate(), obj: SplashScreen@c2835ad, taskId: 48496
D TV PlayerActivity onCreate(), obj: PlayerActivity@cab7684, taskId: 48496
D TV SplashScreen onDestroy(), obj: SplashScreen@c2835ad, taskId: 48496
D Launcher MainActivity onNewIntent(), obj: MainActivity@7654ed4, taskId: 48492
D TV SplashScreen onCreate(), obj: SplashScreen@9459f0c, taskId: 48496
D TV PlayerActivity onCreate(), obj: PlayerActivity@2ef230f, taskId: 48496
D TV SplashScreen onDestroy(), obj: SplashScreen@9459f0c, taskId: 48496
D Launcher MainActivity onNewIntent(), obj: MainActivity@7654ed4, taskId: 48492
D TV SplashScreen onCreate(), obj: SplashScreen@617dc12, taskId: 48496
D TV PlayerActivity onCreate(), obj: PlayerActivity@25cf522, taskId: 48496
D TV SplashScreen onDestroy(), obj: SplashScreen@617dc12, taskId: 48496
Вопрос
Какую комбинацию флагов следует использовать, чтобы приложение возобновило работу из предыдущего состояния без создания дубликатов при запуске со значка лаунчера, даже если до этого он был открыт через голосовой помощник? Также будем признательны за любые общие советы по управлению запуском деятельности в этих сценариях.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ating-dupl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»