Определить, начиналось ли приложение загрузки с голосовой команды или сенсорного ввода

В моем приложении для загрузки я хотел бы показать различные варианты компоновки на основе того, запускается ли приложение через голосовую команду или через сенсорный ввод. Но я не мог найти способ сделать это в документах.

Единственный возможный способ, который я могу придумать, состоит в том, чтобы иметь две пусковые установки. Но я ищу довольно прямое решение, чем создание нескольких пусковых установок.

После проверки журнала активности я нашел следующее:

Когда вы нажимаете на приложение в Android Wear, оно регистрируется:

I / ActivityManager (446): START u0 {act = android.intent.action.MAIN flg = 0x10000000 cmp = com.lge.wearable.compass / .MainActivity} из uid 10002 на дисплее 0

Когда вы запускаете приложение с помощью голосовой команды, это регистрируется:

I / ActivityManager (446): START u0 {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10008000 pkg = com.lge.wearable.compass cmp = com.lge.wearable. Компас / .MainActivity} из uid 10002 на дисплее 0

Разница заключается в параметре cat или category который включает android.intent.category.LAUNCHER в качестве значения.

Следующий код в функции onCreate будет отличать, запускается ли приложение голосом или нажатием onCreate .

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); .... Set<String> categories = getIntent().getCategories(); if(categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) { Log.i(LOGTAG, "app started via voice"); }else{ Log.i(LOGTAG, "app started with user tap"); } .... } 

В настоящее время это работает для моего сценария приложения и надеюсь, что он работает и для других.

Принимая ответ от дхаваля, я вижу, что категория LAUNCHER задается при запуске с третьей стороны, такой как Wear Mini Launcher.

Поэтому вместо этого в настоящий момент выполняется следующая проверка (хотя может измениться в будущих версиях Wear):

 int flags = getIntent().getFlags(); String pkg = getIntent().getPackage(); if(pkg != null && (flags & Intent.FLAG_ACTIVITY_CLEAR_TASK) > 0) { Log.i("MUSICCONTROL", "app started via voice"); }else{ Log.i("MUSICCONTROL", "app started with user tap"); }