admin管理员组文章数量:1291260
Unity Android 之 应用打开手机的指定网页浏览器(external browser)的两种方法(封装aar和不用封装aar方法)
目录
Unity Android 之 应用打开手机的指定网页浏览器(external browser)的两种方法(封装aar和不用封装aar方法)
一、简单介绍
二、实现原理
三、注意事项
四、效果预览
五、实现步骤
aar 方法 Android 端
aar法 /不用aar法 Unity 端
六、关键代码
一、简单介绍
整理一些在Unity上可以方便调用 Android 方法的一些接口脚本,便于后期开发使用。
本节介绍,在Unity 的 Android 开发中,应用需求打开外部浏览器,并指定打开某个网页的功能;这里调用Android封装的方法,介绍两种方法,一种是使用aar进行封装,另一种是不用封装aar的方法;
二、实现原理
1、Uri.parse(url)
2、new Intent(Intent.ACTION_VIEW, uri)
3、startActivity(intent)
4、涉及Unity Android 交互的知识
三、注意事项
1、不管是 aar 还是不用 aar,调用的都是 Android 统一的接口,哪种方便哪种便于理解,就用哪种方法吧,仅供参考
四、效果预览
五、实现步骤
aar 方法 Android 端
1、打开Android Studio,新建一个Android Library
2、新建一个类,编写代码,实现调用打开网址网页浏览器的方法
3、编译对应 aar 包
4、指定位置就可以找到 aar 了
aar法 /不用aar法 Unity 端
1、打开Unity,新建一个空工程
2、把aar 导入工程中
3、在场景中,添加两个Button ,分别打开浏览器的不同方法
4、编写脚本,实现两种方法打开浏览器
5、把 测试脚本挂载到场景中,并对应赋值
6、打包,运行效果如上图
六、关键代码
1、BrowserWrapper
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BrowserWrapper : MonoSingleton<BrowserWrapper>
{
public void OpenBrowserWithAAR(string url)
{
if (Application.platform == RuntimePlatform.Android)
{
Debug.Log(GetType()+ "/OpenBrowserWithAAR()/");
Debug.Log(GetType() + MAndroidJavaObject.Call<string>("OpenBrowser",url));
}
}
public void OpenBrowserWithNoAAR(string url)
{
if (Application.platform == RuntimePlatform.Android)
{
Debug.Log(GetType() + "/OpenBrowserWithNoAAR()/");
AndroidJavaObject uri = new AndroidJavaObject("android.Uri").CallStatic<AndroidJavaObject>("parse", url);
AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "android.intent.action.VIEW", uri);
GetActivity().Call("startActivity", intent);
/*
Android 端代码 对应解析
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
*/
}
}
#region 私有变量
AndroidJavaObject _mAndroidJavaObject;
public AndroidJavaObject MAndroidJavaObject
{
get
{
if (_mAndroidJavaObject == null)
{
_mAndroidJavaObject = new AndroidJavaObject("com.example.xan.openbrowser.BrowserUtil");
}
return _mAndroidJavaObject;
}
}
#endregion
#region 获取Unity Activity
private static string unityPlayerClass = "com.unity3d.player.UnityPlayer";
public static AndroidJavaObject GetActivity()
{
AndroidJavaClass jc = new AndroidJavaClass(unityPlayerClass);
if (jc == null)
{
Debug.LogErrorFormat("Failed to get Unity Player class, {0}", unityPlayerClass);
return null;
}
AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
if (activity == null)
{
Debug.LogError("Failed to obtain Android Activity from Unity Player class.");
return null;
}
return activity;
}
#endregion
}
2、TestBrowserWrapper
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestBrowserWrapper : MonoBehaviour
{
public Button AARButton;
public Button NoARRButton;
// Start is called before the first frame update
void Start()
{
AARButton.onClick.AddListener(()=> {
BrowserWrapper.Instance.OpenBrowserWithAAR("http://www.baidu");
});
NoARRButton.onClick.AddListener(() => {
BrowserWrapper.Instance.OpenBrowserWithNoAAR("http://www.baidu");
});
}
}
3、MonoSingleton
using UnityEngine;
public abstract class MonoSingleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance = null;
private static readonly object locker = new object();
private static bool bAppQuitting;
public static T Instance
{
get
{
if (bAppQuitting)
{
instance = null;
return instance;
}
lock (locker)
{
if (instance == null)
{
// 保证场景中只有一个 单例
T[] managers = Object.FindObjectsOfType(typeof(T)) as T[];
if (managers.Length != 0)
{
if (managers.Length == 1)
{
instance = managers[0];
instance.gameObject.name = typeof(T).Name;
return instance;
}
else
{
Debug.LogError("Class " + typeof(T).Name + " exists multiple times in violation of singleton pattern. Destroying all copies");
foreach (T manager in managers)
{
Destroy(manager.gameObject);
}
}
}
var singleton = new GameObject();
instance = singleton.AddComponent<T>();
singleton.name = "(singleton)" + typeof(T);
singleton.hideFlags = HideFlags.None;
DontDestroyOnLoad(singleton);
}
instance.hideFlags = HideFlags.None;
return instance;
}
}
}
protected virtual void Awake()
{
bAppQuitting = false;
}
protected virtual void OnDestroy()
{
bAppQuitting = true;
}
}
版权声明:本文标题:Unity Android 之 应用打开手机的指定网页浏览器(external browser)的两种方法(封装aar和不用封装aar方法) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1727323165a1236218.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论