Unity3D 调用Android的提供的接口

需求:android提供相关的接口,android只提供接口,没有相关的界面,android接口打包以jar包的形式供unity3d调用

1.编写相关的android接口
在Eclipse中新建工程,并设置为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);
    }
}

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>

android:name 请使用android工程中全部限定名
和对应的权限

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

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");

               }
          }
     }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值