【问题标题】:How to get device's default SpeechService provider - Android API 13如何获取设备的默认 SpeechService 提供程序 - Android API 13
【发布时间】:2022-09-27 23:33:54
【问题描述】:

根据this page,Android 13 删除了 SpeechService 实现,包括 RecognitionService。它还提到:

\"应用程序应使用设备的默认语音服务提供程序,而不是硬编码特定的应用程序。\"

这是我在小于 13 的 API 上使用的代码:

String GOOGLE_RECOGNITION_SERVICE_NAME =
        \"com.google.android.googlequicksearchbox/com.google.android.voicesearch.serviceapi.GoogleRecognitionService\";

SpeechRecognizer speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context,
            ComponentName.unflattenFromString(GOOGLE_RECOGNITION_SERVICE_NAME));

关于如何获取设备的 SpeechService 默认提供程序的任何想法?

    标签: android speech-recognition


    【解决方案1】:

    我通过实现以下代码解决了这个问题:

    public static String getAvailableVoiceRecognitionService(Activity activity)
    {
        final List<ResolveInfo> services = activity.getPackageManager().queryIntentServices(
                new Intent(RecognitionService.SERVICE_INTERFACE), 0);
    
        String recognitionServiceName = null;
    
        for (final ResolveInfo info : services)
        {
            String packageName = info.serviceInfo.packageName;
            String serviceName = info.serviceInfo.name;
    
            String testRecognitionServiceName = packageName + "/" + serviceName;
    
            ServiceConnection connection = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {
    
                }
    
                @Override
                public void onServiceDisconnected(ComponentName name) {
    
                }
            };
    
            Intent serviceIntent = new Intent(RecognitionService.SERVICE_INTERFACE);
    
            ComponentName recognizerServiceComponent =
                    ComponentName.unflattenFromString(testRecognitionServiceName);
    
            if (recognizerServiceComponent != null)
            {
                serviceIntent.setComponent(recognizerServiceComponent);
                try
                {
                    boolean isServiceAvailableToBind = activity.bindService(serviceIntent, connection, Context.BIND_AUTO_CREATE);
                    if (isServiceAvailableToBind) {
                        activity.unbindService(connection);
                        recognitionServiceName=testRecognitionServiceName;
                        break;
                    }
                }
                catch (SecurityException e)
                {
                    e.printStackTrace();
                }
            }
        }
    
        return recognitionServiceName;
    }
    

    然后启动 SpeechRecognizer 你做:

    public void initSpeechRecognition(Activity activity)
    {
       String recognitionServiceName = getAvailableVoiceRecognitionService(activity);
        if (recognitionServiceName==null)
            return;
    
        speechRecognizer = SpeechRecognizer.createSpeechRecognizer(activity,
                ComponentName.unflattenFromString(recognitionServiceName));
     }
    
    
    
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多