Итак, я создаю приложение Speech to Text с помощью голосового помощника.Я пытаюсь сделать функцию телефонного звонка, чтобы пользователь мог набрать номер, и он позвонит по нему.
Я почти на месте, но номер звонит только при втором разговоре.Первый раз, когда он говорит «Звонок не отправлен».
Я выяснил причину этого;когда пользователь говорит номер, он сначала не обновляет переменную, а затем вызывает функцию «call».Я перепробовал почти все, но он не обновляет переменную правильно.
Т.е.
private TextView txtSpeechInput;
public String num = "123";
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_SPEECH_INPUT: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> result = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
txtSpeechInput.setText(result.get(0).replaceAll("\\s+", ""));
num = txtSpeechInput.getText().toString();
}
break;
}
}
}
public void dialPhoneNumber(String phone) {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phone));
if (intent.resolveActivity(getPackageManager()) != null) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
startActivity(intent);
}
return ;
}
}
private void processResult(String command) {
command = command.toLowerCase();
if(command.indexOf("time") != -1) {
Date now = new Date();
String time = DateUtils.formatDateTime(this, now.getTime(), DateUtils.FORMAT_SHOW_TIME);
speak("The time is " + time);
}
if(command.indexOf("date") != -1) {
String date = DateFormat.getDateInstance().format(new Date());
speak("The date is " + date);
}
else if (command.indexOf("open") != -1) {
if(command.indexOf("browser") != -1) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.co.uk/"));
startActivity(intent);
}
}
if(command.indexOf("call") != -1) {
promptSpeechInput();
try {
Thread.sleep(18000);
} catch (InterruptedException e) {
e.printStackTrace();
}
dialPhoneNumber(num);
}
}
В этом коде, когда использование говорит "сделать звонок", он открывает другое приглашение дляпринять речевой ввод.Сохраняет его в txtSpeechInput
(где написано results.get0), а затем на этом этапе я обновляю переменную num и преобразую ее в строку.Затем он запускает dialPhoneNumber
Теперь, скажем, я запускаю его в первый раз и говорю «07123456789», он скажет call not sent
, потому что он пытается вызвать значение по умолчанию 123
, если я говорю это снова илидругой номер, по которому он будет звонить 07123456789
.
Как и почему он не обновляется до вызова функции телефона?