Autore Topic: Voice Recognition e EditText  (Letto 2045 volte)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Voice Recognition e EditText
« il: 28 Giugno 2011, 15:00:07 CEST »
0
Salve ragazzi,
sto realizzando una piccola applicazione in cui vorrei riempire una EditText parlando invece che scrivendo...
Gestisco correttamente il processo di acquisizione ma il problema sorge dopo.

La situazione che ho è la seguente:
Codice: [Seleziona]
speakDettagli.setOnClickListener(new OnClickListener() {       
                        @Override
                        public void onClick(View v) {
                                Intent intent = new Intent("android.speech.action.RECOGNIZE_SPEECH");
                                startActivityForResult(intent, 0);
                                dettagli.setText("risult: "+voice);
                        }
                });

Al click del pulsante parte la procedura di speak recog ma il problema è che non riesco a scrivere il risultato (contenuto in "voice") nella editText; se invece clicco nuovamente sul pulsante allora riempio il campo correttamente. Quello che io vorrei fare è richiamare l'istruzione
Codice: [Seleziona]
dettagli.setText("risult: "+voice); solo DOPO che l'activityForResult si è conclusa.

Come posso fare?

Grazie

Offline aw4y

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung i5500
  • Sistema operativo:
    osx/linux
Re:Voice Recognition e EditText
« Risposta #1 il: 28 Giugno 2011, 16:35:01 CEST »
0
ciao,
se guardi nella documentazione delle activity

Activity | Android Developers

noterai che usando il metodo (da te usato) startActivityForResult, puoi utilizzare al seguito un metodo onActivityResult, un pò come segue qui:


Codice (Java): [Seleziona]
 public class MyActivity extends Activity {
     ...

     static final int PICK_CONTACT_REQUEST = 0;

     protected boolean onKeyDown(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
             // When the user center presses, let them pick a contact.
             startActivityForResult(
                 new Intent(Intent.ACTION_PICK,
                 new Uri("content://contacts")),
                 PICK_CONTACT_REQUEST);
            return true;
         }
         return false;
     }

     protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == PICK_CONTACT_REQUEST) {
             if (resultCode == RESULT_OK) {
                 // A contact was picked.  Here we will just display it
                 // to the user.
                 startActivity(new Intent(Intent.ACTION_VIEW, data));
             }
         }
     }
 }

penso possa risolvere il tuo problema...+

aw4y

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:Voice Recognition e EditText
« Risposta #2 il: 28 Giugno 2011, 16:38:04 CEST »
0
Scusa tu mi suggerisci di lanciare un'altra activity alla fine? Non mi è chiaro il meccanismo...

Offline aw4y

  • Utente junior
  • **
  • Post: 59
  • Respect: +6
    • Mostra profilo
  • Dispositivo Android:
    samsung i5500
  • Sistema operativo:
    osx/linux
Re:Voice Recognition e EditText
« Risposta #3 il: 28 Giugno 2011, 16:43:40 CEST »
0
no :)

semplicemente con:

Codice (Java): [Seleziona]
startActivityForResult(
                 new Intent(Intent.ACTION_PICK,
                 new Uri("content://contacts")),
                 666);
assegni un requestcode alla tua operazione (quella di riconoscimento vocale) ...ho messo 666 come esempio (un int qualsiasi)

dopodichè il resto è tipo così:

Codice (Java): [Seleziona]
     protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if (requestCode == 666) {
             if (resultCode == RESULT_OK) {
                       //fai quello che devi fare con i dati che hai ottenuto....
             }
         }
     }

spero sia piu chiaro così :)
« Ultima modifica: 28 Giugno 2011, 16:44:48 CEST da Ricky` »

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:Voice Recognition e EditText
« Risposta #4 il: 28 Giugno 2011, 17:16:20 CEST »
0
Si avevo già tentato una soluzione del genere ma il problema è che lo scope della EditText non mi permette di adottare questa soluzione..
Avevo anche provato a utilizzare "return" nel onActivityResult ma anche qst sembra non sia possibile utilizzarlo...

Mi sà che l'unica cosa è richiamare l'activity e passare come putExtra il valore della variabile "voice".
A meno che tu non abbia qualche altra soluzione!?

Grazie

Offline bovello

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • Mostra profilo
    • Bovello
  • Dispositivo Android:
    San Francisco
  • Play Store ID:
    Bovello
  • Sistema operativo:
    Windows 7, Mac OS Snow Leopard
Re:Voice Recognition e EditText
« Risposta #5 il: 17 Luglio 2011, 16:53:51 CEST »
0
la procedura per l'utilizzo del riconoscimento vocale vuole il lancio dell'activity con lo startActivityForResult e che poi prenda il risultato con il onActivityResult.

quindi devi controllare il resultcode assicurandoti che sia ok e recuperare la trascrizione del parlato dall'intent data con i get extras.

tipicamente otterrai un ArrayList di Stringhe, che sono le possibili interpretazioni di quello che è stato detto (l'utente dovrebbe quindi selezionare quello più appropriato). Se vuoi saltare questa parte prendi il primo anche se potrebbe non essere il migliore.

la tua variabile dettagli (la text view) dovrebbe avere una visibilità di classe in modo che tu possa settarne il testo dentro al metodo onActivityResult. se così non fosse per motivi tuoi allora puoi recuperarla come variabile locale e settarne il valore all'interno del metodo.
spero di essere stato chiaro.

Offline bovello

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • Mostra profilo
    • Bovello
  • Dispositivo Android:
    San Francisco
  • Play Store ID:
    Bovello
  • Sistema operativo:
    Windows 7, Mac OS Snow Leopard
Re:Voice Recognition e EditText
« Risposta #6 il: 17 Luglio 2011, 17:00:29 CEST »
0
per la serie un pezzo di codice vale più di mille parole  :-) ti riporto un pezzo dell'esempio presente sul sito ufficiale android developers

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
            ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
          ....

nella variabile matches hai un lista dei possibili testi riconosciuti.