ionic2 讯飞语音插件踩坑之android7.0下使用讯飞cordova插件

项目需求:根据极光推送的消息,语音播出内容。
项目环境

ionic info

问题描述^讯飞语音插件是一个比较老的插件,package.json文件都没有。好像cordova7.0以上安装插件就要求要有package.json文件。

当然,使用cordova6.0直接安装是没有任何问题的,不过像我这样喜新厌旧的人,是不会妥协的。

没有package.json文件我就给你创建不就好了,网上看了下,创建package.json还挺简单。在插件的根目录内执行命

   npm install -g plugman 
   plugman createpackagejson /path/to/your/plugin  // 这个是插件的全路径

创建成功,安装插件,也没有报错了。但是run android的时候,还是报错Error: ENOENT: no such file or directory, open..../config.xml


run android

网上找了很多资料,说是android7.0引入资源文件的路径改了,还有plugin.xml引入.jar文件的标签也换了。


安装插件后platforms/android下的文件

android7.0的目录结构跟android6.0的目录结构不一样了,都整合在app目录下了。所以上图的assets和libs都要放到app下才对,插件的plugin.xml文件修改为
修改plugin.xml文件

完整的plugin.xml如下

<?xml version='1.0' encoding='utf-8'?>
<plugin id="cordova-plugin-xunfeiListenSpeaking" version="0.0.1" xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
    <name>cordova-plugin-xunfeiListenSpeaking</name>

    <platform name = "android">
        <js-module name="xunfeiListenSpeaking" src="www/cordova-plugin-xunfeiListenSpeaking.js">
            <clobbers target="xunfeiListenSpeaking" />
        </js-module>
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="XunfeiListenSpeaking" >
                <param name="android-package" value="com.thomas.xunfeilistenspeaking.XunfeiListenSpeaking"/>
            </feature>
        </config-file>

         <config-file target="AndroidManifest.xml" parent="/manifest">  
              <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
                <uses-permission android:name="android.permission.RECORD_AUDIO" />
                <uses-permission android:name="android.permission.INTERNET" />
                <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
                <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
                <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
                <uses-permission android:name="android.permission.READ_PHONE_STATE" />
                <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
                <uses-permission android:name="android.permission.READ_CONTACTS" />
                <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
                <uses-permission android:name="android.permission.WRITE_SETTINGS" />
                <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
                 <!-- 移动统计分析 -->
                <meta-data
                    android:name="IFLYTEK_APPKEY"
                    android:value="'5b6d3768'" />
                <meta-data
                    android:name="IFLYTEK_CHANNEL"
                    android:value="Android_Demo" />

        </config-file> 
        <config-file target="AndroidManifest.xml" parent="/manifest/application">
            <activity android:name="com.thomas.xunfeilistenspeaking.XunfeiDialogActivity"
                  android:theme="@android:style/Theme.Translucent.NoTitleBar">

        </activity>
        </config-file>
        <!--assets-->
        <source-file src="src/android/assets/iattest.wav" target-dir="app/src/main/assets"/>
        <source-file src="src/android/assets/call.bnf" target-dir="app/src/main/assets"/>
        <source-file src="src/android/assets/grammar_sample.abnf" target-dir="app/src/main/assets"/>
        <source-file src="src/android/assets/keys" target-dir="app/src/main/assets"/>
        <source-file src="src/android/assets/userwords" target-dir="app/src/main/assets"/>
        <source-file src="src/android/assets/iflytek/voice_bg.9.png" target-dir="app/src/main/assets/iflytek"/>
        <source-file src="src/android/assets/iflytek/voice_empty.png" target-dir="app/src/main/assets/iflytek"/>
        <source-file src="src/android/assets/iflytek/voice_full.png" target-dir="app/src/main/assets/iflytek"/>
        <source-file src="src/android/assets/iflytek/waiting.png" target-dir="app/src/main/assets/iflytek"/>
        <source-file src="src/android/assets/iflytek/warning.png" target-dir="app/src/main/assets/iflytek"/>
        <source-file src="src/android/assets/iflytek/recognize.xml" target-dir="app/src/main/assets/iflytek"/>


        <!--lib-->
        <lib-file src="src/android/libs/Msc.jar"/>
        <lib-file src="src/android/libs/Sunflower.jar"/>
        <source-file src="src/android/libs/armeabi/libmsc.so" target-dir="app/src/main/jniLibs/armeabi"/>
            <source-file src="src/android/libs/arm64-v8a/libmsc.so" target-dir="app/src/main/jniLibs/arm64-v8a"/>
        <source-file src="src/android/libs/armeabi-v7a/libmsc.so" target-dir="app/src/main/jniLibs/armeabi-v7a"/>

        <!--layout-->
        <source-file src="src/android/res/layout/activity_xunfei_dialog.xml" target-dir="app/src/main/res/layout"/>

        <!--xml-->
        <source-file src="src/android/res/xml/iat_setting.xml" target-dir="app/src/main/res/xml"/>
        <source-file src="src/android/res/xml/ise_settings.xml" target-dir="app/src/main/res/xml"/>
        <source-file src="src/android/res/xml/tts_setting.xml" target-dir="app/src/main/res/xml"/>
        <source-file src="src/android/res/xml/understand_setting.xml" target-dir="app/src/main/res/xml"/>

        <!--src-->
        <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/XunfeiListenSpeaking.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
        <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/IatSettings.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
        <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/JsonParser.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
        <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/SettingTextWatcher.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
        <source-file src="src/android/src/com/thomas/xunfeilistenspeaking/XunfeiDialogActivity.java" target-dir="src/com/thomas/xunfeilistenspeaking"/>
        

        <!--res-->
        <config-file target="res/values/strings.xml" parent="/resources">
             <!--<string name="app_name">讯飞语音示例</string>-->
                <!-- 请替换成在语音云官网申请的appid -->
                <string name="app_id">5b6d3768</string>
                <string name="example_explain">本示例为讯飞语音Android平台开发者提供语音听写、语法识别、语义理解和语音合成等代码样例,旨在让用户能够依据该示例快速开发出基于语音接口的应用程序。</string>
                <string name="text_tts_source">科大讯飞作为中国最大的智能语音技术提供商,在智能语音技术领域有着长期的研究积累,并在中文语音合成、语音识别、口语评测等多项技术上拥有国际领先的成果。科大讯飞是我国唯一以语音技术为产业化方向的“国家863计划成果产业化基地”…</string>
                <string name="text_tts_source_en">iFLYTEK is a national key software enterprise dedicated to the research of intelligent speech and language technologies, development of software and chip products, provision of speech information services, and integration of E-government systems. The intelligent speech technology of iFLYTEK, the core technology of the company, represents the top level in the world.</string>
                <string name="text_isr_abnf_hint">\t上传内容为:\n\t#ABNF 1.0 gb2312;\n\tlanguage zh-CN;\n\tmode voice;\n\troot $main;\n\t$main = $place1 到$place2 ;\n\t$place1 = 北京 | 武汉 | 南京 | 天津 | 东京;\n\t$place2 = 上海 | 合肥;</string>
                <string name="text_understand_hint">\t您可以说:\n\t今天的天气怎么样?\n\t北京到上海的火车?\n\t有什么好吃的?\n\t上海外滩有哪些酒店?\n\n\t更多语义请登录:\n\thttp://osp.voicecloud.cn/ \n\t配置您的专属语义吧!</string>
                <!-- 听写 -->
                <string name="text_begin">请开始说话…</string>
                <string name="text_begin_recognizer">开始音频流识别</string>
                <string name="text_upload_contacts">上传联系人</string>
                <string name="text_upload_userwords">上传用户词表</string>
                <string name="text_upload_success">上传成功</string>
                <string name="text_userword_empty">词表下载失败或内容为空</string>
                <string name="text_download_success">下载成功</string>
                <string name="pref_key_iat_show">iat_show</string>
                <string name="pref_title_iat_show">显示听写界面</string>
                <string name="pref_title_iat_dwa">结果动态修正</string>

                <string name="xunfei_cancel_listen">取消语音</string>
                <!-- 合成 -->
                <string-array name="engine_entries">
                    <item>本地合成</item>
                    <item>在线合成</item>
                </string-array>
                <string-array name="engine_values">
                    <item>local</item>
                    <item>cloud</item>
                </string-array>
                <string-array name="voicer_cloud_entries">
                    <item>小燕—女青、中英、普通话</item>
                    <item>小宇—男青、中英、普通话</item>
                    <item>凯瑟琳—女青、英</item>
                    <item>亨利—男青、英</item>
                    <item>玛丽—女青、英</item>
                    <item>小研—女青、中英、普通话</item>
                    <item>小琪—女青、中英、普通话</item>
                    <item>小峰—男青、中英、普通话</item>
                    <item>小梅—女青、中英、粤语</item>
                    <item>小莉—女青、中英、台湾普通话</item>
                    <item>小蓉—女青、中、四川话</item>
                    <item>小芸—女青、中、东北话</item>
                    <item>小坤—男青、中、河南话</item>
                    <item>小强—男青、中、湖南话</item>
                    <item>小莹—女青、中、陕西话</item>
                    <item>小新—男童、中、普通话</item>
                    <item>楠楠—女童、中、普通话</item>
                    <item>老孙—男老、中、普通话</item>
                </string-array>
                <string-array name="voicer_cloud_values">
                    <item>xiaoyan</item>
                    <item>xiaoyu</item>
                    <item>catherine</item>
                    <item>henry</item>
                    <item>vimary</item>
                    <item>vixy</item>
                    <item>xiaoqi</item>
                    <item>vixf</item>
                    <item>xiaomei</item>
                    <item>xiaolin</item>
                    <item>xiaorong</item>
                    <item>xiaoqian</item>
                    <item>xiaokun</item>
                    <item>xiaoqiang</item>
                    <item>vixying</item>
                    <item>xiaoxin</item>
                    <item>nannan</item>
                    <item>vils</item>
                </string-array>
                <string-array name="emot_entries">
                    <item>正常</item>
                    <item>高兴</item>
                    <item>悲伤</item>
                    <item>生气</item>
                </string-array>
                <string-array name="emot_values">
                    <item>neutral</item>
                    <item>happy</item>
                    <item>sad</item>
                    <item>angry</item>
                </string-array>
                <string-array name="stream_entries">
                    <item>通话</item>
                    <item>系统</item>
                    <item>铃声</item>
                    <item>音乐</item>
                    <item>闹铃</item>
                    <item>通知</item>
                </string-array>
                <string-array name="stream_values">
                    <item>0</item>
                    <item>1</item>
                    <item>2</item>
                    <item>3</item>
                    <item>4</item>
                    <item>5</item>
                </string-array>
                <string formatted="false" name="tts_toast_format">缓冲进度为%d%%,播放进度为%d%%</string>
                <!-- 语言 -->
                <string-array name="language_entries">
                    <item>普通话</item>
                    <item>粤语</item>
                    <item>河南话</item>
                    <item>英语</item>
                </string-array>
                <string-array name="language_values">
                    <item>mandarin</item>
                    <item>cantonese</item>
                    <item>henanese</item>
                    <item>en_us</item>
                </string-array>
                <!-- 语音评测 -->
                <string name="text_en_word">"[word]\napple\nbanana\norange"</string>
                <string name="text_en_sentence">"The quick brown fox jumps over the lazy dog."</string>
                <string name="text_cn_syllable">"知,痴,是"</string>
                <string name="text_cn_word">"磁铁,率领,脆弱,动手,古筝"</string>
                <string name="text_cn_sentence">"一座座雪峰插入云霄,峰顶银光闪闪,大大小小的湖泊,像颗颗宝石镶嵌在彩带般的沟谷中。"</string>
                <string-array name="ise_language_entries">
                    <item>英语</item>
                    <item>汉语</item>
                </string-array>
                <string-array name="ise_language_values">
                    <item>en_us</item>
                    <item>zh_cn</item>
                </string-array>
                <string-array name="category_entries">
                    <item>单字</item>
                    <item>词语</item>
                    <item>句子</item>
                </string-array>
                <string-array name="category_values">
                    <item>read_syllable</item>
                    <item>read_word</item>
                    <item>read_sentence</item>
                </string-array>
                <string-array name="result_level_entries">
                    <item>plain</item>
                    <item>complete</item>
                </string-array>
                <!-- 标点符号 -->
                <string-array name="punc_entries">
                    <item>有标点</item>
                    <item>无标点</item>
                </string-array>
                <string-array name="punc_values">
                    <item>1</item>
                    <item>0</item>
                </string-array>
                <string-array name="dwa_entries">
                    <item>开启</item>
                    <item>关闭</item>
                </string-array>
        </config-file>
    </platform>
    
    <platform name="ios">
        <js-module name="speech" src="www/Speech.js">
<!--            <clobbers target="navigator.speech" />-->
            <clobbers target="xunfeiListenSpeaking" />
        </js-module>
        <config-file parent="/*" target="config.xml">
            <feature name="Speech">
                <param name="ios-package" value="CDVSpeech" />
            </feature>
        </config-file>
        
        <config-file target="*-Info.plist" parent="NSMicrophoneUsageDescription">
            <string></string>
        </config-file>
        
        <header-file src="src/ios/CDVSpeech.h" />
        <source-file src="src/ios/CDVSpeech.m" />
        
        <framework src="AVFoundation.framework" />
        <framework src="AddressBook.framework" />
        <framework src="AudioToolbox.framework" />
        <framework src="SystemConfiguration.framework" />
        <framework src="QuartzCore.framework" />
        
        <framework src="libz.tbd" />
        <framework src="libc++.tbd" />
        <framework src="UIKit.framework" />
        <framework src="CoreGraphics.framework" />
        <framework src="Foundation.framework" />
        <framework src="CoreTelephony.framework" />
        <framework src="CoreLocation.framework" />
    <framework src="Contacts.framework" />
        
        <framework src="src/ios/iflyMSC.framework" custom="true" />
    </platform>
    
</plugin>

这样,重新安装插件再platform android,然后 run android 就ok啦。


安装成功

讯飞cordova插件使用笔记

在需要使用的页面声明

declare var xunfeiListenSpeaking: any;

播放语音

xunfeiListenSpeaking.startSpeak(success => {
  // 读完‘666’会进入这里,可以在这里写个循环读个不停
  console.log("播放成功");
}, err => {
  // 报错会进到这里
  console.log("err", err);
}, '666');
// 其中 ‘666’ 就是播放的内容

停止播放

xunfeiListenSpeaking.stopSpeak(); // 停止播放,本次播放结束

暂停播放

xunfeiListenSpeaking.pauseSpeaking(); // 暂时停止播放

恢复播放

xunfeiListenSpeaking.resumeSpeaking(); // 恢复那个暂停的播放

总结:由于对cordova插件的封装不了解,在给cordova插件升级这一块来说,真是巨难。自己网上找了好多资料,还把极光插件装了又卸载,就是为了看看他装上了,paltforms/android 的目录结构,并根据极光推送插件的plugin.xml来调整讯飞插件的plugin.xml。cordova6.0也装过,也是为了看看android6.0和android7.0目录结构的区别。对于老手来说,可能一眼就看穿,可是对于我,老天保佑,我特么的终于给装上了。我不是在写代码,我是在写bug...

最后附上参考链接,不过感觉用这个插件的人好少。。。。
1、在cordova Android7.0.0 以下版本集成最新插件
^https://www.jianshu.com/p/23b117ca27a6
2、cordova plugin.xml详解
^https://www.jianshu.com/p/92dd69ae7d8f
3、cordova 中文网文档
^http://cordova.axuer.com/docs/zh-cn/latest/guide/cli/index.html
4、讯飞cordova插件git地址
^https://github.com/Edc-zhang/cordova-plugin-IFlyspeech

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,056评论 25 707
  • 前言:用cordova开发hybrid app的过程中,由于是html5开发的app,在手机上很多权限受限制...
    京东内部优惠券阅读 5,361评论 5 65
  • cordova基于HTML、CSS和JavaScript的,用于创建跨平台移动应用程序的快速开发平台。能够利用iP...
    sunsboyxu阅读 2,598评论 0 6
  • 我慢慢地走着。 我的身旁,是大片的湖水,宽阔的湖面,在明媚的阳光下闪烁着粼粼的波光。微风拂过,湖面漾起一圈圈的波纹...
    江苏苇笛阅读 373评论 2 4
  • 奉献之星 具有较强的综合素质,积极参与公益活动,在扶贫、助学、助残、环保等志愿服务方面事迹突出,具有较大影响力...
    仓鼠R阅读 316评论 0 0