Использую библиотеку Speech для реализации "Сири" xD Вот код:
private Button speechBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
speechBtn = (Button) findViewById(R.id.btnSpeech);
speechBtn.setOnClickListener(this);
Speech.init(this, getPackageName());
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btnSpeech:
try {
// you must have android.permission.RECORD_AUDIO granted at this point
Speech.getInstance().startListening(new SpeechDelegate() {
@Override
public void onStartOfSpeech() {
}
@Override
public void onSpeechRmsChanged(float value) {
}
@Override
public void onSpeechPartialResults(List<String> results) {
}
@Override
public void onSpeechResult(String result) {
if (result.equals("Закрой приложение"))
System.exit(0);
else if (result.equals("Скажи привет"))
Speech.getInstance().say("Привет");
//и т.д. и т.п.
else
Speech.getInstance().say("Неизвестная команда");
}
});
}catch (SpeechRecognitionNotAvailable exc) {
Log.e("speech", "Speech recognition is not available on this device!");
} catch (GoogleVoiceTypingDisabledException exc) {
Log.e("speech", "Google voice typing must be enabled!");
}
}
}
На API 22- при нажатии на кнопку работает все отлично. Слушает - делает что скажу и т.д. В общем все ОК. Тестил на Marshmallow(23) происходит следующая шняга - срабатывает слушатель и в ту же секунду воспроизводится else - "Неизвестная команда". Т.е. кликнул на кнопку он сразу воспроизвел else, т.е. даже не прослушав. Это потому что на этом месте("// you must have android.permission.RECORD_AUDIO granted at this point") отсутствует вот такой код:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);
}else{
//продолжаем работу или вызываем метод или класс
}
Т.е. должно быть так? :
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);
} else {
try {
Speech.getInstance().startListening(new SpeechDelegate() {
@Override
public void onStartOfSpeech() {
}
@Override
public void onSpeechRmsChanged(float value) {
}
@Override
public void onSpeechPartialResults(List<String> results) {
}
@Override
public void onSpeechResult(String result) {
if (result.equals("Закрой приложение"))
System.exit(0);
else if (result.equals("Скажи привет"))
Speech.getInstance().say("Привет");
//и т.д. и т.п.
else
Speech.getInstance().say("Неизвестная команда");
}
});
} catch (SpeechRecognitionNotAvailable speechRecognitionNotAvailable) {
speechRecognitionNotAvailable.printStackTrace();
} catch (GoogleVoiceTypingDisabledException e) {
e.printStackTrace();
}
}
Хотя на 5.1 работало не то что без проверки на разрешение, даже без самого прописанного в ручную разрешения робило. В общем... в этом дело все?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Ребят, помогите решить проблемуЧтобы воспользоваться функцией, ее надо сделать статичной
Знакомая сдаёт экзамен и у неё такой вопрос DataModel в jsfС ним никогда не работал и прочитав доках, как понял объяснил, а препод ей сказал что...
Необходимо сделать так, чтобы можно было выделить левой кнопкой несколько строк в JTable и по правой кнопке удалять выделенные строки из таблицы...