zoukankan      html  css  js  c++  java
  • 【语音从零之五】用科大讯飞语音包实现语音打开已安装应用程序

    【更新】有人说不会使用科大讯飞的语音包。这里是传送门,能够參考从零系列的前四篇文章

    (一)利用科大讯飞语音包实现Android语音识别Demo

    (二)科大讯飞语音包Mscdemo的使用

    (三)自己定义类中调用讯飞语音包错误解决的方法

    (四)运用Handler另起线程执行科大讯飞语音识别

    本文主要介绍怎样利用语音包实现口语控制打开应用程序,比如:说“打开计算器”,计算器就彭地打开了。

    要完毕这个功能,首先要识别出指令是“打开",然后识别出应用程序名称是”计算器“。这些工作都交给科大讯飞语音包的语义理解模块完毕。

    我们要做的,首先是把已安装的应用程序的名称和包名保存下来,由于启动一个应用程序须要它的包名(PackageName)和类名(ClassName)。

    List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
    		for (PackageInfo pi : packages){
    			InstalledAppMap.put(pi.applicationInfo.loadLabel(getPackageManager()).toString(),
    					pi.packageName);
    		}

    第二,我们须要通过应用程序名找到向相应的包名。应用程序名靠语音包解析返回的Json获取,一般语义理解返回的结构是这种

    String str = "{"semantic": {"slots": {"name": "计算器"" +
    "}},"rc": 0,"operation": "LAUNCH","service": "app","+ 
     ""text": "打开计算器"}";

    "就是Java中String内容中的转义引號,你懂得。然后我写了一个方法专门依据SlotItem获取SlotValue,比較简单就不贴了,非常easy得到应用名为”计算器“。

    第三步就是通过包名获得类名,这里用到了ResolveInfo类。

    				String AppName = Utils.GetValueGivenSlot(tmpString, "name");
    				if (AppName.equals(""))
    					Log.e(Const.LAUNCHAPP_TAG,"App name can not be recongnized");
    				Intent Newintent = new Intent();
    				Intent resolveIntent = new Intent(Intent.ACTION_MAIN,null);
    				resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    				String packageName = InstalledAppMap.get(AppName);
    				resolveIntent.setPackage(packageName);
    				List<ResolveInfo> apps = 
    						getPackageManager().queryIntentActivities(resolveIntent, 0);
    				ResolveInfo ri = apps.iterator().next();
    				if (ri!=null){
    					String className = ri.activityInfo.name;
    					Newintent.setComponent(new ComponentName(packageName,className));
    				}
    				startActivity(Newintent);

    Utils.GetValueGivenSlot(tmpString, "name")//这是我自己写的方法
    转载请注明出处,谢谢咯!


  • 相关阅读:
    C C++ POSIX 的一些 IO 操作
    左式堆的合并
    IDEA Maven 项目默认编译项目为JDK 1.5
    spring学习总结(一)_Ioc基础(中)
    SpringBoot(十五)_springboot实现预览pdf
    PostgreSQL之性能优化(转)
    PostgreSQL之Sequence序列(转)
    PostgreSQL之连接数修改
    CAS登陆过程UML中文版
    node 和npm 版本更新
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6756322.html
Copyright © 2011-2022 走看看