Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现 您所在的位置:网站首页 安卓系统怎么打开另一个系统 Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现

Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现

#Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现| 来源: 网络整理| 查看: 265

Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现

 

目录

Unity Android 之 在 Unity 中直接调用打开其他应用apk的方法实现

一、简单介绍

二、使用说明

三、效果预览

四、实现步骤

五、关键代码

 

一、简单介绍

整理一些在Unity上可以方便调用 Android 方法的一些接口脚本,便于后期开发使用。

调用 Android 的 getPackageManager ,通过包名打开设备上安装的 apk应用,不需要 Android 端封装接口。

 

二、使用说明

1、调用方法

OpenPackage("com.tencent.mobileqq); 调用打开手机QQ

 

三、效果预览 图3-1 Unity打开QQ

 

四、实现步骤

1、打开Unity,新建一个工程,如下图  

图4-1 打开iUnity,新建工程

 

2、在工程中创建脚本,AndroidProcessData 实现调用 Toast 的功能, Test_AndroidProcessData 测试 Toast 的功能,如下图  

图4-2  新建脚本

 

3、把脚本 Test_AndroidProcessData 挂载到场景中,如下图  

图4-3 挂载脚本呢

 

4、运行场景,测试效果,如下图

图4-4  测试效果

 

 

五、关键代码

1、AndroidProcessData

using UnityEngine; /// /// 调用 Android 一些方法的整理 /// public static class AndroidProcessData { #if UNITY_ANDROID /// /// 通过包名调用其他软件 /// /// 应用包名 /// AndroidJavaObject public static void OpenPackage(string pkgName, AndroidJavaObject activity = null) { if (activity == null) { AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = UnityPlayer.GetStatic("currentActivity"); } using (AndroidJavaObject joPackageManager = activity.Call("getPackageManager")) { using (AndroidJavaObject joIntent = joPackageManager.Call("getLaunchIntentForPackage", pkgName)) { if (null != joIntent) { activity.Call("startActivity", joIntent); } else { Debug.Log("未安装此软件:" + pkgName); } } } } #endif } //相关说明 //a.AndroidJavaClass对应着Android里面的Java类,而AndroidJavaObject对应着Android里面实例化的对象。 //b.一定要切记C#里的String和Java的String不是一码事,所以调用Android方法时如果需要传字符串为参数时,不能直接给个字符串,应该给个Java里的String,例如 new AndroidJavaObject("java.lang.String","你想传的字符串"); //c.由于AndroidJavaClass对应的是类,所以一般用之来调用对应的类的静态变量(GetStatic)或者静态方法(CallStatic("functionName", param1, param2,....));其中的Type为返回类型,注意是Java的返回类型不是C#的,一般整型和布尔型是通用的,其他的如果不清除可以统一写返回类型为AndroidJavaObject,当然没有返回类型的不需要写Type。 //d.AndroidJavaObject对应的是实例对象,所以用new方法给其初始化时要注意说明其是哪个类的实例对象。再比如刚才那个例子: AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", "字符串的值");

 

2、Test_AndroidProcessData

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test_AndroidProcessData : MonoBehaviour { AndroidJavaClass UnityPlayer; AndroidJavaObject activity; // Start is called before the first frame update void Start() { UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = UnityPlayer.GetStatic("currentActivity"); } void OnGUI() { GUILayout.BeginArea(new Rect(100, 100, 200, 200)); if (GUILayout.Button("Open QQ Apk")) { AndroidProcessData.OpenPackage("com.tencent.mobileqq", activity); } GUILayout.EndArea(); } }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有