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.callandroidapp;
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、在测试机上运行,点击按钮,就可以唤起打开到百度地图应用,具体如下图
