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

Unity3D调用Android提供的接口

2017-05-12 14:27 330 查看
需求:Android提供相关的接口,android只提供接口,没有相关的界面,android接口打包以jar包的形式供Unity3D调用

1.编写相关的android接口

在studio中新建工程,并设置为library,编写相关的接口

ex:在Android中提供录音的接口

android中有一个service负责实现录音相关的工作,对外提供的接口是

Recorder.Java 中的两个接口 startRecordering(),stopRecordering()

编写完成之后,编译打包,生成androidplug.jar(名称随意)

public class Recorder{
public Recorder(){
}

public static Recorder instance() {
if(instance == null) {
instance = new Recorder();
}
return instance;
}

public void startRecordering(Context context){
Log.e(TAG, "-----------plugin start recordering--------------");
RecorderService.startRecordering(context);
}

public void stopRecordering(Context context){
Log.e(TAG, "-----------plugin end recordering--------------");

RecorderService.stopRecordering(context);

RecorderService.playerArm(context);
}
}


[/code]

2.新建unity3d的工程,在Assets目录下,新建目录,结构如下

Plugins

|_Android

目录结构和名称不能随意更改,将第一步生成的jar包,放在Android目录下。再用unity3d生成apk时,用对应的AndroidManifest.xml模板,我们需要在AndroidManifest.xml中加入对用的service和相应的权限

将 Unity3d安装目录中,到Editor\Data\PlaybackEngines\androidplayer 目录将AndroidManifest.xml copy到unity3d工程的Assets->Plugins->Android目录下,需要在这个AndroidManifest.xml中加入android中提供的录音的服务和录音的权限

<service android:name="com.xxx.androidpluginRecorderService"></service>
1


1
[/code]

android:name 请使用android工程中全部限定名

和对应的权限

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


1
2
[/code]

AndroidManifest.xml中其他内容不需要修改

3.unity3d中调用接口

private AndroidJavaObject toastExample = null;
private AndroidJavaObject activityContext = null;

void Start () {
using(AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) {
activityContext = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
Debug.Log("-----------UnityPlayer");
}

//android中对应的类名,获得相应的类的实例
using(AndroidJavaClass pluginClass = new AndroidJavaClass("com.xxx.androidplugin.Recorder")) {
Debug.Log("-----------com.xxx.androidplugin.Recorde------");
if(pluginClass != null) {
Debug.Log("-----------com.xxx.androidplugin.Recorde init success------");
toastExample = pluginClass.CallStatic<AndroidJavaObject>("instance");

}
}
}


[/code]

//通过实例就可以调用想用的方法,Call(“”,”“) 第一个参数是方法名,第二个参数是方法需要的参数

toastExample.Call (“startRecordering”,activityContext);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d android