Unity 之 唤起调用 Android 其它应用app的方法

2025-11-21 09:14:11

1、打开Android Studio,新建一个工程,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

2、在工程中,新建一个模块(New Module),选择Android Library ,取一个名字,点击Finish,添加一个模块,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

3、选中刚才新建的模块,右键向新建的模块添加一个 Java Class,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

4、向脚本中添加代码,首先添加一个通过反射,获取Unity Activity,然后编写调用Android 其它应用的接口,包括检测对应android是否存在,具体代码和代码说明如下图

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

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工程中,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

7、打开Unity,新建一个Unity工程,然后把aar拖进Unity工程中的Plugins/Android文件夹中,作为SDK调用,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

Unity 之 唤起调用 Android 其它应用app的方法

8、在场景中添加一个Button,布局如图,作为点击唤醒Android App的触发方式,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

9、在工程中,新建一个脚本Test,双击或者右键打开进行编辑,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

10、代码内容大概是,通过 New 把aar 包中的类获取到,然后给按钮绑定事件,触发唤醒其它应用的委托,这里以调用百度地图App为例,具体代码和代码说明如下图

Unity 之 唤起调用 Android 其它应用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上,并把按钮赋值上去,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

13、保存场景,切换Android平台,连接测试机,PlayerSettings的包名可以不予啊啊让的报名一样,打包在测试机上运行,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

14、在测试机上运行,点击按钮,就可以唤起打开到百度地图应用,具体如下图

Unity 之 唤起调用 Android 其它应用app的方法

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢