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.net.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 Activityprivate 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 updatevoid Start(){AARButton.onClick.AddListener(()=> {BrowserWrapper.Instance.OpenBrowserWithAAR("http://www.baidu.com");});NoARRButton.onClick.AddListener(() => {BrowserWrapper.Instance.OpenBrowserWithNoAAR("http://www.baidu.com");});}}

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方法)相关推荐

  1. 如何使用bat批处理文件打开多个指定网页,很简单

    如何使用bat批处理文件打开多个指定网页,很简单 步骤: (1)新建文本文件.txt, 重命名,更改后缀名为".bat" (2)编辑bat文本文件,如下: @echo off cd ...

  2. android 手机如何截图,原来安卓手机有这么多种截屏方式 最后两种一般人不会用...

    原标题:原来安卓手机有这么多种截屏方式 最后两种一般人不会用 在这个信息化的时代,智能手机几乎主宰着天下,人人手中一部智能机 .看新闻,听歌曲,打游戏.我们的日常几乎全部由手机霸占着.但截屏作为初级的 ...

  3. android开发 实现动态获得app的cpu占有率并导出文件的两种方法。

    android开发 实现动态获得app的cpu占有率并导出文件的两种方法. 最近在做学校实验室的项目的时候,师兄要求我对app的性能进行评估,主要是从电量.cpu占有率.python模型的响应时间三者 ...

  4. PhpCms V9调用指定栏目子栏目文章的两种方法

    PhpCms V9调用指定栏目子栏目文章的两种方法 第一种.直接写子栏目id ,用cat in {pc:get sql="SELECT * from v9_news where status ...

  5. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  6. 怎么卸载手机上下载的软件?苹果手机有两种方法

    怎么卸载手机上下载的软件?很多人会在手机上下载各种各样的软件,时间一长,小内存的手机无法储存这么多内容,建议大家定期将不需要的软件直接卸载,避免占用空间影响手机的使用.今天给大家分享一下卸载手机软件的 ...

  7. 硬盘在计算机上没显示内存不足,打开Excel2016提示内存或磁盘空间不足的两种解决方法...

    在Excel2016或者Excel2013中打开新建的空白文档提示:内存或磁盘空间不足,Microsoft Excel无法再次打开或保存任何文档. 要想获得更多的可用内存,请关闭不再使用的工作簿或程序 ...

  8. android点击视频使用固定应用打开,Android 使用intent打开手机自带应用播放视频,音频,文档,还有打开应用市场...

    1 打开手机上的视频播放器播放视频String url = "http://192.168.0.1/1.mp4" Intent intent = new Intent(); int ...

  9. android 项目中打开手机上优酷,腾讯等播放器或任何软件。

    项目中点击一个空间打开手机上以安装的播放器, PackageManager packageManager = getActivity().getPackageManager();            ...

最新文章

  1. SAP历史库存MB5B的详解
  2. 【算法基础】常用的数据结构与算法
  3. 统计之都 http://cos.name/
  4. ANSYS——相同模型不同创建方式的同载荷同约束下的比较
  5. java编程基础素数实验报告,JAVA 基础编程练习题1 (输出素数)
  6. C++ class实现双向循环链表(完整代码)
  7. 论文浅尝 - ICML2020 | 通过关系图上的贝叶斯元学习进行少样本关系提取
  8. redis 分布式中间件设计分析
  9. layer checkbox
  10. SQL查询语句精华使用简要
  11. stdlib.h函数请单
  12. java关键字有system吗_java 关键字
  13. springboot++vue+elementui网上零食购物商城网站系统带统计投诉java
  14. 【游戏设计模式】之三 状态模式、有限状态机 Unity版本实现
  15. 2010年全球移动行业回顾:iPad大热 中国崛起
  16. 国医中药,人参神秘而又独特的地位
  17. 巧用css的滤镜filter属性处理图片,高斯模糊,HTML页面黑白滤镜等
  18. swd只能下载一次第二次出现错误
  19. 一、项目概述和项目基本结构
  20. 太为难我了,阿里面试了7轮...

热门文章

  1. 计算机知识的黑板报图片大全,学习黑板报精选图片欣赏
  2. 权限管理之文件权限管理
  3. 科技文章也可以非常的文采对立统一描述的简洁明了
  4. 信息系统监理师视频教程
  5. mysql workbench6.3.7_mysql workbench官方版
  6. java--表格的使用
  7. 怎么制作app系统软件,大概需要多少钱
  8. Windows 8系统中LOL登陆错误出现的服务器未响应怎么处理?
  9. 易协软件:workflow与BPM区别
  10. win7如何调整计算机c盘,两种解决win7c盘越来越小的技巧