C# 在Unity中,如何在外部应用程序中打开文件(即PDF)?

C# 在Unity中,如何在外部应用程序中打开文件(即PDF)?,c#,android,ios,unity3d,C#,Android,Ios,Unity3d,我现在正在开发一个Unity应用程序,客户端希望能够允许用户点击按钮并在手机(iOS和Android)上打开PDF,但无论他们使用什么应用程序来阅读PDF,而不是在Unity应用程序中 我已经尝试了Application.OpenURL(“文件:///[…]),它可以在我的Windows桌面上的编辑器中工作(在Edge中打开PDF)。。。但是它不能在Android上打开文件(打开文件时不会发生任何事情) 以下是我正在做的: public string FileName = string.Empt

我现在正在开发一个Unity应用程序,客户端希望能够允许用户点击按钮并在手机(iOS和Android)上打开PDF,但无论他们使用什么应用程序来阅读PDF,而不是在Unity应用程序中

我已经尝试了
Application.OpenURL(“文件:///[…])
,它可以在我的Windows桌面上的编辑器中工作(在Edge中打开PDF)。。。但是它不能在Android上打开文件(打开文件时不会发生任何事情)

以下是我正在做的:

public string FileName = string.Empty;
public string FileExtension = string.Empty;
private string FilePath = string.Empty;
void Start()
{
    FilePath = string.Format("{0}/{1}.{2}", Application.persistentDataPath, FileName, FileExtension);
}

public void OpenFile()
{
    if (!File.Exists(FilePath))
    {
        var pathRoot = Application.streamingAssetsPath;
        #if UNITY_ANDROID && !UNITY_EDITOR
            pathRoot = Application.dataPath + "!/assets";
        #endif
        StartCoroutine(FetchFile(string.Format("{0}/{1}.{2}", pathRoot, FileName, FileExtension)));
        return;
    }
    Application.OpenURL(FilePath);
}

private IEnumerator FetchFile(string path)
{
    path = "file://" + path;
    #if UNITY_ANDROID && !UNITY_EDITOR
        path = "jar:" +  path;
    #endif
    var fetcher = new WWW(path);
    yield return fetcher;
    File.WriteAllBytes(FilePath, fetcher.bytes);

    Application.OpenURL("file:///" + FilePath);
}
因此,我正在检查该文件是否存在于存储设备上,如果不存在,我将从应用程序中“提取”该文件并将其写入存储。然后我尝试用
文件打开本地的“URL://
标准(此
应用程序.OpenURL(“https://www.google.com“”;
可以成功地在我的移动浏览器中打开该URL)

有没有一种统一的方式来创建一个
意图
或者触发它的东西?
文件路径
在Windows上工作,与我将字节写入的路径相同,因此应该是正确的。。。还是我遗漏了什么


注意:这在iOS中也不起作用,但我想我在Unity论坛(现在找不到链接)上读到Android是路径/URL的唯一例外。。。有人能帮我解决这个问题吗?

Nougat(第7节)中的Android权限更改

你不能只通过路径打开,因为系统挡住了它

只需将目标API级别降低到23(Android 6.0“棉花糖”)

您可以根据此参考URL使用此代码:

void openPDF(){
  string namePDF = "test";
  TextAsset pdfTem = Resources.Load("PDFs/"+namePDF, typeof(TextAsset)) as TextAsset;
  System.IO.File.WriteAllBytes(Application.persistentDataPath + "/"+namePDF+".pdf", pdfTem.bytes);
  Application.OpenURL(Application.persistentDataPath+"/"+namePDF+".pdf");
    }