Я разрабатываю приложение для Android и хочу различать в поисковой активности (которая получает намерение), вводил ли пользователь текст с клавиатуры или с помощью функции распознавания голоса в SearchView (AppCompat). Как я могу различить эти два?
Как отличить текстовый поиск от голосового?
Ответы (2)
В моем приложении я определяю это, проверяя, является ли значение SearchManager.USER_QUERY
нулевым. Если это так, это означает, что пользователь не вводил текст для начала поиска, а это означает, что он использовал голосовой поиск. Я делаю это так:
@Override
protected void onNewIntent(Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SEARCH)) {
//if this was a voice search
if (intent.getStringExtra(SearchManager.USER_QUERY) == null) {
//do stuff with voice search query...
} else {
//perform search with text query
}
}
}
Это решение всегда казалось мне хакерским, но это единственный способ, которым я мог это сделать, и он работает безупречно с тех пор, как я его реализовал.
person
NoChinDeluxe
schedule
22.04.2016
Чтобы поиск заполнялся голосом, должен ли пользователь нажимать кнопку, чтобы говорить?
person
pooja
schedule
17.03.2016
Да. Пользователь щелкает значок микрофона на панели инструментов (AppCompat) вместо ввода текста, после чего открывается системное диалоговое окно распознавания голоса.
- person developing_android; 17.03.2016
Поэтому, когда вы начинаете поисковое действие, вы можете включить в него намерение.putExtra(EXTRA_MESSAGE, сообщение); startActivity(намерение); в качестве идентификатора действия, которое запускает действие поиска.
- person pooja; 18.03.2016
И в поисковой активности проверьте это так Intentintent = getIntent(); Строковое сообщение = намерение.getStringExtra(MyActivity.EXTRA_MESSAGE); И вы можете сравнить строку. Это не обязательно должно быть строковое значение, это может быть другой тип данных — как вам удобно.
- person pooja; 18.03.2016