Unity5.x +Android Studio 3.0 接入讯飞SDK

声明:主要转载自https://blog.csdn.net/weixin_36303734/article/details/54898166,只做了些稍微的改变。原文用的是jar包,这里用的是aar,自己学习,记笔记。

第一篇博客,说起来原因比较搞笑,一直用的有道笔记。但是突然就受不了他粘贴代码,一大堆空行,空格啥的,很烦。。。。。。


写完之后发现搭环境这我写的比较繁琐,大家可以参考下这里https://www.jianshu.com/p/86b275da600e


1、AS新建工程

2、 Project 目录下 ,File-New-New Module,新建AndroidLibrary,命名随意。然后在Android目录下,选中该模块,右键New -Activity-Empty Activit。

不要勾选不需要,layout文件夹中的布局文件,因为导入到unity中用不到。

3、将SDK文件夹中的MSC.jar考到libs文件夹下。在main文件夹下新建文件夹jinLibs,将SDK中的so文件考进来,
4、在Unity安装目录下找到class.jar文件。同样,考到libs文件夹下。路径:
\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
如图:
 



5、右键MSC.jar,Class.jar,选择 Add as Library
(此时需要在工程中关联jar。File-Project Structure。左侧选中步骤二中新建的Library。点击右方加号,选择Files dependency。将步骤3、4中加入的jar包关联到module。如图:
这一步可以当作验证,看是否已经加入.


package com.zjzstudy.zjz.xunfei;

import android.os.Bundle;
import android.widget.EditText;


import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechUtility;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.LinkedHashMap;

public class MainActivity extends UnityPlayerActivity {

    private SpeechRecognizer mIat;
    // 用HashMap存储听写结果
    private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5b319e0a");
        mIat=SpeechRecognizer.createRecognizer(this,null);
        mIat.setParameter(SpeechConstant.DOMAIN,"iat");
        mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");
        mIat.setParameter(SpeechConstant.ACCENT,"mandarin");
        mIat.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
    }
    private RecognizerListener mRecoListener=new RecognizerListener() {
        @Override
        public void onVolumeChanged(int i, byte[] bytes) {

        }

        @Override
        public void onBeginOfSpeech() {

        }

        @Override
        public void onEndOfSpeech() {

        }

        @Override
        public void onResult(RecognizerResult recognizerResult, boolean b) {
            printResult(recognizerResult);
        }

        @Override
        public void onError(SpeechError speechError) {

        }

        @Override
        public void onEvent(int i, int i1, int i2, Bundle bundle) {

        }
    };

    public void startListen(){
        mIat.startListening(mRecoListener);
    }
    private void printResult(RecognizerResult results) {
        String text = JsonParser.parseIatResult(results.getResultString());

        String sn = null;
        // 读取json结果中的sn字段
        try {
            JSONObject resultJson = new JSONObject(results.getResultString());
            sn = resultJson.optString("sn");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        mIatResults.put(sn, text);

        StringBuffer resultBuffer = new StringBuffer();
        for (String key : mIatResults.keySet()) {
            resultBuffer.append(mIatResults.get(key));
        }
        UnityPlayer.UnitySendMessage("XfManager","OnResult",resultBuffer.toString());
    }
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zjzstudy.zjz.speechrecognizer2">

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
        </activity>
    </application>
    <!--连接网络权限,用于执行云端语音能力 -->

    <uses-permission android:name="android.permission.INTERNET"/>

    <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    <!--读取网络信息状态 -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <!--获取当前wifi状态 -->

    <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.READ_CONTACTS"/>

    <!--外存储写权限,构建语法需要用到此权限 -->

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <!--外存储读权限,构建语法需要用到此权限 -->

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <!--配置权限,用来记录应用配置信息 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    <!--摄相头权限,拍照需要用到 -->

    <uses-permission android:name="android.permission.CAMERA" />

添加权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zjzstudy.zjz.speechrecognizer2">

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
        </activity>
    </application>
    <!--连接网络权限,用于执行云端语音能力 -->

    <uses-permission android:name="android.permission.INTERNET"/>

    <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    <!--读取网络信息状态 -->

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <!--获取当前wifi状态 -->

    <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.READ_CONTACTS"/>

    <!--外存储写权限,构建语法需要用到此权限 -->

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <!--外存储读权限,构建语法需要用到此权限 -->

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <!--配置权限,用来记录应用配置信息 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>

    <!--摄相头权限,拍照需要用到 -->

    <uses-permission android:name="android.permission.CAMERA" />



添加权限

添加权限的时候可能会出现编译错误

只有应用级别才能使用此权限。我们修改下安全级别即可

File -> Settings -> Editor -> Inspections

在Android Lint下面,将 Using system app permission的Error改成Warning。

如图,

在最下边。


导出aar(懒得打字,直接截图了)

这是我们的aar包,把它拷贝出去,然后做一些相应的修改.

将后缀名改为zip,解压,将classes.jar放到libs里,替换掉里面的,并将外面的删除.

然后打开AndroidManifest文件,将这一行删除

一系列操作完成后,重新压缩,并改为aar格式.


返回Android工程,将配置文件考出来


这个包名一定要和unity打包设置的包名一致

Android Studio导出aar包已经完成了。

接下来导入Unity里的Plugins-Android(自己创建)目录下。在unity写代码调用就好了

注意,对应Android中“UnityPlayer.UnitySendMessage("Manager", "Result", "result:" + ret.toString()); ”,此脚本应绑在名为Manager的物体上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值