Unity 之 唤起调用 Android 其它应用app的方法
1、打开Android Studio,新建一个工程,具体如下图
2、在工程中,新建一个模块(New Module),选择Android Library ,取一个名字,点击Finish,添加一个模块,具体如下图
3、选中刚才新建的模块,右键向新建的模块添加一个 Java Class,具体如下图
4、向脚本中添加代码,首先添加一个通过反射,获取Unity Activity,然后编写调用Android 其它应用的接口,包括检测对应android是否存在,具体代码和代码说明如下图
5、CallAnotherApp.java具体的内容如下:package com.example.calla荏鱿胫协ndroidapp;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.widget.Toast;public class CallAnotherApp { /** * 设置一个 Activity 参数 */ private Activity _unityActivity; /** * 通过反射获取 Unity 的 Activity 的上下文 */ Activity getActivity(){ if(null == _unityActivity){ try{ Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer"); Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype); _unityActivity = activity; }catch (ClassNotFoundException e){ e.printStackTrace(); }catch (IllegalAccessException e){ e.printStackTrace(); }catch (NoSuchFieldException e){ e.printStackTrace(); } } return _unityActivity; } /** * 唤起App * @param String */ public void DoActiveApp(String packageName) { PackageManager packageManager = getActivity().getPackageManager(); if (checkAppExist(packageName)) { Intent intent = packageManager.getLaunchIntentForPackage(packageName); getActivity().startActivity(intent); } else { Toast.makeText(getActivity(), packageName + "no exist", Toast.LENGTH_SHORT).show(); } } /** * 检查App是否已安装 * @param String * @return boolean */ private boolean checkAppExist(String packageName) { PackageInfo packageInfo = null; try { packageInfo = getActivity().getPackageManager().getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return packageInfo != null; }}
6、选中新建的模块,在菜撮劝丛食单栏 Build - Make Module "XXX",,然后在 build/outputs文件夹下即可以找到编译好的aar,选择编译好的aar,在文件夹中查看,便于拖入Unity工程中,具体如下图
7、打开Unity,新建一个Unity工程,然后把aar拖进Unity工程中的Plugins/Android文件夹中,作为SDK调用,具体如下图
8、在场景中添加一个Button,布局如图,作为点击唤醒Android App的触发方式,具体如下图
9、在工程中,新建一个脚本Test,双击或者右键打开进行编辑,具体如下图
10、代码内容大概是,通过 New 把aar 包中的类获取到,然后给按钮绑定事件,触发唤醒其它应用的委托,这里以调用百度地图App为例,具体代码和代码说明如下图
11、Test 脚本内容如下:using UnityEngine;using UnityEngine.UI;public class Test : MonoBehaviour { public Button btn; /// <summary> /// android 对象 /// </summary> AndroidJavaObject androidJavaObject; void Start() { //通过该API来实例化导入的arr中对应的类,参数为 包名+类名 androidJavaObject = new AndroidJavaObject("com.example.callandroidapp.CallAnotherApp"); //按钮添加唤起app事件 btn.onClick.AddListener(OnBtnClick); } /// <summary> /// 调用其它应用 /// </summary> private void OnBtnClick() { // 这里测试唤起安装的百度地图 androidJavaObject.Call("DoActiveApp", "com.baidu.BaiduMap"); }}
12、脚本编译正确,回到Unity,把脚本挂载到场景中新添加的GameObject上,并把按钮赋值上去,具体如下图
13、保存场景,切换Android平台,连接测试机,PlayerSettings的包名可以不予啊啊让的报名一样,打包在测试机上运行,具体如下图
14、在测试机上运行,点击按钮,就可以唤起打开到百度地图应用,具体如下图