首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UNITY Application.OpenUrl()在Android7 Nougat上不起作用

UNITY Application.OpenUrl()是Unity引擎中的一个函数,用于在应用程序中打开指定的URL链接。然而,在Android 7 Nougat版本上,由于安全性增强的限制,该函数可能无法正常工作。

Android 7 Nougat引入了一项新的安全策略,称为"StrictMode"。该策略禁止应用程序在主线程中执行网络请求或访问外部资源,以避免阻塞用户界面。由于Application.OpenUrl()函数可能会触发网络请求,因此在Android 7 Nougat上可能会受到StrictMode的限制。

为了解决这个问题,可以使用Unity的插件系统来调用Android原生的Intent来打开URL链接。下面是一个示例代码:

代码语言:csharp
复制
#if UNITY_ANDROID && !UNITY_EDITOR
using UnityEngine;
using System.Collections;
using UnityEngine.Android;

public class OpenURL : MonoBehaviour
{
    public void Open(string url)
    {
        if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
        {
            Permission.RequestUserPermission(Permission.ExternalStorageRead);
        }

        if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
        {
            Permission.RequestUserPermission(Permission.ExternalStorageWrite);
        }

        AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
        AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent", intentClass.GetStatic<string>("ACTION_VIEW"));
        AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
        AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", url);
        intentObject.Call<AndroidJavaObject>("setData", uriObject);
        AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
        currentActivity.Call("startActivity", intentObject);
    }
}
#endif

上述代码使用了Android的Intent来打开URL链接。在使用该代码之前,需要确保在Unity的Player Settings中启用了"Write Permission"和"Read Permission"选项。

这是一个解决UNITY Application.OpenUrl()在Android 7 Nougat上不起作用的方法。希望对你有帮助!如果你有其他问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android 四大组件学习之BroadcastReceiver四

    我们前面几节不是说了,当广播接受者一旦注册到系统中,当系统发送的广播和你注册的广播的action匹配时,系统就会启动广播接收者所在的进程。除非用户手动停止广播接收者所在的进程。但是生活中有这样一种情况,比如说:我在玩网络游戏,假设说游戏本身在系统电量低的情况下,会自动保存当前游戏的进度,也就是存档的。可以这么说,此广播接受者只有在用户玩游戏时才需要启动,别的时候用户是不需要的。如果此广播接收者一直常驻于系统,那不是很浪费系统资源。所以我们就需要动态的启动广播接收者,和停止广播接收者。可是大家知道,广播接收者只要在清单文件中注册过了的,就会永远启动的。所以唯一的办法就是不在清单文件中注册,在代码中动态注册。

    01
    领券