您的位置:首页 > 移动开发 > Unity3D

Unity 中使用百度语音识别发布Android程序(一)

2017-11-08 18:36 761 查看
最近开发的项目中需要使用语音识别的功能,国内有讯飞和百度两大平台,分别看了两家的文档后,决定使用百度语音识别功能。

百度语音没有Unity的sdk包,因此就需要使用百度的安卓sdk,在Android Studio中写好功能,导出jar包供Unity使用。

第一步 在Android Studio中发布测试jar包

首先,由于是第一次自己使用Android Studio导出Unity jar包,因此先写一个测试jar包看Unity能否成功调用方法和收到回调。

打开Android Studio,新建一个工程。



输入名称和包名后点击下一步,Minimun SDK 为最小支持的安卓sdk版本,选择后点击下一步,选择Empty Activity,点击下一步,名称默认就可以,然后点击Finish。

如果在控制台出现以下错误:

Error:Failed to open zip file.

Gradle’s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)

说明gradle依赖不能加载,你可以百度自行下载适合的gradle包,下载后解压。然后在Android Studio中点击File->Settings 如图,在Project-level settings 中选择use local gradle distribution然后选择下载好的gradle路径。



在项目名称上点击右键,选择新建一个Module,然后选择Android Library。



可以看到项目中多了一个文件夹baiduvoice,文件夹名为刚才创建Android Library时输入。下文中称这个新建的文件夹为Library。



要开发Unity可用的jar包,需要导入Unity提供的class.jar 文件。该文件在Unity安装路径下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes文件夹中,将该文件复制到baiduvoice/libs 文件夹中。

然后选择File->Project Structure,在Modules中选择刚才创建的Library,选择Dependencies,可以看到右边有加号,点击加号后选择第二个,然后找到刚才添加的class.jar。



在这个Library下新建一个class,这个class在src/main/java/…文件夹中,代码如下:

public class BaiduVoice extends Fragment{

public static BaiduVoice instance;

public static void start(){
instance = new BaiduVoice();
UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(instance, "BaiduVoice").commit();
}

/**
*
* @param _obj  Unity中场景中的对象名称
* @param _fun  回调的Unity方法
* @param _val
*/
public void CallBack(String _obj, String _fun, String _val){
UnityPlayer.UnitySendMessage(_obj, _fun, "Android Callback " + _val);
}

}


这个类为什么不继承UnityPlayerActivity,请参考这篇文章,这篇文章指出了在自己编写Unity中使用的安卓插件时,为什么不要继承UnityPlayerActivity。

接下来,修改Library文件夹下的build.gradle文件,将一下代码添加到文件后面。

//task to delete the old jar
task deleteOldJar(type: Delete) {
delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
from('build/intermediates/bundles/default/')
into('release/')
include('classes.jar')
///Rename the jar
rename('classes.jar', 'BaiduVoice.jar')
}

exportJar.dependsOn(deleteOldJar, build)


点击界面右边的gradle,如图,选中Library点击右键,选择Refresh external project。然后点开下方的other,找到exportJar,双击,可以看到在Library下有了一个release文件夹,说明我们导出jar包成功了。



接下来,新建一个Unity工程,将刚才导出的jar包放到Unity工程中Plugins/Android文件夹下,此方法导出的jar包并不需要在Plugins/Android下添加AndroidManifest.xml文件,unity打包安卓时会自动添加。新建一个Test脚本,代码如下:

public class Test : MonoBehaviour {

public Text myText;

public void SetText(string str){
this.myText.text = str;
}

// Use this for initialization
void Start () {
//包名为新建java类的包名
AndroidJavaClass ajc = new AndroidJavaClass("com.beefun.baiduvoice.BaiduVoice");
ajc.CallStatic("start");

AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("instance");

ajo.Call("CallBack", "Canvas", "SetText", " Plugins");
}

// Update is called once per frame
void Update () {

}
}


在场景中新建一个Canvas,并且添加一个Text, 将此脚本挂在Canvas上,为脚本的text赋值,发出安卓版本。如下图



如果在手机上显示出如下图片,则表示调用成功。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息