2014-11-17 4 views
8

नहीं कहा गया है, मुझे नए Android API21, विशेष रूप से VoiceInteractorService के साथ कोई समस्या है।Android API21: VoiceInteractionService onReady() को

मैं API21 में नए हॉटवर्ड पहचान का उपयोग करना चाहता हूं। यदि मैं एक बटन दबाता हूं, तो 'google' शब्द के लिए एक हॉटवर्ड पहचान शुरू होनी चाहिए। java.lang.IllegalStateException: तक ​​उपलब्ध नहीं है

जब मैं एक गतिविधि (MainActivity) है और मैं createAlwaysOnHotwordDetector (स्ट्रिंग keyphrase, लोकेल लोकेल, AlwaysOnHotwordDetector.Callback कॉलबैक) विधि VoiceInteractorService से कॉल करना चाहते हैं, मैं कोई त्रुटि मिलती है onReady() कहा जाता है। मैंने थोड़ी देर का उपयोग करके इसे अस्थायी रूप से हल करने का प्रयास किया, यह देखने के लिए कि कब रीडी() कहा जाता है और मैं createAlwaysOnHotwordDetector() विधि को निष्कासित कर सकता हूं। मुझे पता चला कि सिस्टम लूप को 15 मिनट के लिए देने के बाद भी, रेडी() को कभी नहीं कहा जाता है।

क्या किसी को भी इस समस्या को हल करने का विचार है?

अग्रिम धन्यवाद।

यह VoiceInteractorService को कॉल करने के लिए मेरी गतिविधि है।

import java.util.Locale; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.service.voice.AlwaysOnHotwordDetector; 
import android.service.voice.AlwaysOnHotwordDetector.Callback; 
import android.service.voice.VoiceInteractionService; 
import android.service.voice.AlwaysOnHotwordDetector.EventPayload; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    Button btn; 
    VoiceInteractionService service; 
    AlwaysOnHotwordDetector.Callback callback; 
    Locale locale = new Locale("nl-NL"); 
    Context ctx; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn = (Button) findViewById(R.id.button1); 
     ctx = getApplicationContext(); 
     service = new VoiceInteractionService(); 
     btn.setOnClickListener(new OnClickListener() { 
      // Create Hotword detector on button click 
      @Override 
      public void onClick(View v) { 
       service.createAlwaysOnHotwordDetector("google", locale, callback); 
      } 
     }); 

     callback = new Callback() { 

      @Override 
      public void onRecognitionResumed() { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onRecognitionPaused() { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onError() { 
       // TODO Auto-generated method stub 
       Log.d("error", "error"); 
      } 

      @Override 
      public void onDetected(EventPayload eventPayload) { 
       // TODO Auto-generated method stub 
       // Display Toast message when Hotword is detected 
       Toast.makeText(ctx, "Google", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onAvailabilityChanged(int status) { 
       // TODO Auto-generated method stub 
      } 
     }; 
    } 
} 
+0

मैं यह भी जानना चाहूंगा। – user1810737

+0

Google से यह टेस्ट ऐप मिला, लेकिन अभी भी अस्पष्ट है कि कैसे रेडी पर कॉल करें। https://android.googlesource.com/platform/frameworks/base/+/fb30d6936a4793a3369fbf8bf51fa526b8a77272/tests/VoiceInteraction/src/com/android/test/voiceinteraction?autodive=0/ – LHeslenfeld

उत्तर

0

VoiceInteractionService अपनी खुद की ध्वनि इंटरैक्शन सेवा बनाने के लिए subclassed जा करने के लिए बनाया गया है। कीबोर्ड की तरह, एक समय में केवल एक ऐसी सेवा सक्षम की जा सकती है। एक बार यह उपयोगकर्ता द्वारा सक्षम हो जाने पर, यह हर जगह सक्रिय है, केवल एक विशेष गतिविधि में नहीं।

आप किसी विशेष गतिविधि के लिए ध्वनि पहचान प्रदान करने के लिए VoiceInteractionService का उपयोग नहीं कर सकते।