声明:主要转载自https://blog.csdn.net/weixin_36303734/article/details/54898166,只做了些稍微的改变。原文用的是jar包,这里用的是aar,自己学习,记笔记。
第一篇博客,说起来原因比较搞笑,一直用的有道笔记。但是突然就受不了他粘贴代码,一大堆空行,空格啥的,很烦。。。。。。
写完之后发现搭环境这我写的比较繁琐,大家可以参考下这里https://www.jianshu.com/p/86b275da600e
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的物体上。