12

मैं भाषण के लिए android.speech.SpeechRecognizer एपीआई का उपयोग कर रहा हूँ में काम नहीं करता।एंड्रॉयड वाक् पहचान एपीआई एंड्रॉयड 7 नूगा

मैं एंड्रॉयड 4-5 में अच्छा काम करता है,

एंड्रॉयड 6 में यह अब झंकार होता है कि जब माइक चालू हो जाती है भाषण के रूप में पाया जाता है जैसे, कीड़े का एक समूह है, इसलिए यह मौजूद है (और छोरों अनिश्चित काल के लिए जब यह पुन: प्रारंभ होता है क्योंकि भाषण का पता चला था, हमारे पास एक हैक वर्कअराउंड है जो कि चीम को चलाने से पहले 0 को वॉल्यूम सेट करता है ...)

एंड्रॉइड 6 में भाषण 5 सेकंड के बाद कोई त्रुटि या कुछ भी नहीं होता । हमारे पास इसके लिए एक और हैक वर्कअराउंड है जो 5 सेकंड के लिए कोई गतिविधि नहीं ढूंढता है और इसे पुनरारंभ करता है ...

अब एंड्रॉइड 7 में, भाषण मान्यता बिल्कुल काम नहीं करती है? मैं अभी तक क्यों डिबग करने में सक्षम नहीं हूं, लेकिन क्या किसी को एंड्रॉइड 7 में काम करने के लिए भाषण API प्राप्त करने में कोई समस्या है?

इसके अलावा, किसी को भी जानता है क्यों एंड्रॉयड प्रत्येक रिलीज़ भाषण एपीआई में नए बग जोड़ने के लिए और नहीं, इन्हें ठीक लगता है, साथ ही साथ जवाब दें। क्या यह ऐसा कुछ है जिसे एंड्रॉइड में समर्थित किया जाना चाहिए, या क्या वे चाहते हैं कि आप इसके बजाय Google इरादे का उपयोग करें?

+1

क्या डिवाइस यू का उपयोग कर रहे हैं? कई नग्न डिवाइस कुछ 64 बिट ऐप्स का समर्थन नहीं करते हैं, भले ही वे कहते हैं कि वे करते हैं। इसे 32 बिट के साथ बनाने का प्रयास करें। मुझे एक ही समस्या थी और इस तरह से हल किया गया। –

+1

एपीआई ~ 2 साल (https://android.googlesource.com/platform/frameworks/base/+log/refs/heads/master/core/java/android/speech देखें) के लिए नहीं बदला है। आप इस एपीआई के एक कार्यान्वयन में एक समस्या का वर्णन कर रहे हैं, लेकिन आप जो कार्यान्वयन है यह (नाम, संस्करण संख्या, आदि) एंड्रॉयड अपने आप में एक भाषण पहचानकर्ता कार्यान्वयन शामिल नहीं है उल्लेख करने में विफल, हालांकि कई फोन गूगल के कार्यान्वयन पहले से स्थापित की क्या ज़रूरत है । एंड्रॉयड 7 के साथ – Kaarel

+1

सैमसंग जी 7, भाषण – James

उत्तर

4

मेरे कोड Nexus5x (नूगा) और Nexus9 (नूगा)

कोशिश और शो logcat पर ठीक काम करता है। प्रकट (शायद बेमानी) में

SpeechRecognizer mGoogleSr; 

void initGoogleSr(Context context) { 
    mGoogleSr = SpeechRecognizer.createSpeechRecognizer(context); 
    mGoogleSr.setRecognitionListener(new GoogleSrListener()); 
} 

void startGoogleSr() { 
    if (mGoogleSr != null) { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName()); 
     intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
     mGoogleSr.startListening(intent); 
    } 
} 
void cancelRecognizing() { 
    if (mGoogleSr != null) { 
     mGoogleSr.cancel(); 
    } 
} 

public class GoogleSrListener implements RecognitionListener { 
    String lastPartialText; 

    @Override 
    public void onReadyForSpeech(Bundle params) { 
     Log.v(TAG, ">>> onReadyForSpeech"); 
     showMessage("ready"); 
    } 

    @Override 
    public void onBeginningOfSpeech() { 
     Log.v(TAG, ">>> onBeginningOfSpeech"); 
     showMessage("recognizing"); 
    } 

    @Override 
    public void onRmsChanged(float rmsdB) { 
    } 

    @Override 
    public void onBufferReceived(byte[] buffer) { 

    } 

    @Override 
    public void onEndOfSpeech() { 
     Log.v(TAG, ">>> onEndOfSpeech"); 
     showMessage("waiting result"); 
    } 

    @Override 
    public void onError(int error) { 
     Log.v(TAG, ">>> onError : " + error); 
     switch (error) { 
      case SpeechRecognizer.ERROR_AUDIO: 
       Log.e(TAG, "ERROR_AUDIO"); 
       break; 
      case SpeechRecognizer.ERROR_CLIENT: 
       Log.e(TAG, "ERROR_CLIENT"); 
       break; 
      case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: 
       Log.e(TAG, "ERROR_INSUFFICIENT_PERMISSIONS"); 
       break; 
      case SpeechRecognizer.ERROR_NETWORK: 
       Log.e(TAG, "ERROR_NETWORK"); 
       break; 
      case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: 
       Log.e(TAG, "ERROR_NETWORK_TIMEOUT"); 
       break; 
      case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
       Log.e(TAG, "ERROR_RECOGNIZER_BUSY"); 
       break; 
      case SpeechRecognizer.ERROR_SERVER: 
       Log.e(TAG, "ERROR_SERVER"); 
       break; 
      case SpeechRecognizer.ERROR_NO_MATCH: 
       Log.v(TAG, "ERROR_NO_MATCH"); 
       break; 
      case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: 
       Log.v(TAG, "ERROR_SPEECH_TIMEOUT"); 
       break; 
      default: 
       Log.v(TAG, "ERROR_UNKOWN"); 
     } 
    } 

    @Override 
    public void onPartialResults(Bundle partialResults) { 
     Log.v(TAG, ">>> onPartialResults"); 
     List<String> resultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     if (resultList != null) { 
      String text = resultList.get(0); 
      if (text.equals(lastPartialText)) { 
       return; 
      } 
      lastPartialText = text; 
      Log.v(TAG, "partial : " + text); 
     } 
    } 

    @Override 
    public void onResults(Bundle results) { 
     Log.v(TAG, ">>> onResults"); 
     List<String> resultList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     if (resultList != null) { 
      String text = resultList.get(0); 
      Log.v(TAG, "result : " + text); 
      showMessage(text); 
     } 
    } 

    @Override 
    public void onEvent(int eventType, Bundle params) { 
     Log.v(TAG, ">>> onEvent type = " + eventType); 
    } 
} 

अनुमतियाँ:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
संबंधित मुद्दे