- С помощью значка средства запуска.< /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
Код: Выделить всё
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