C# 在Unity中,如何在外部应用程序中打开文件(即PDF)?
我现在正在开发一个Unity应用程序,客户端希望能够允许用户点击按钮并在手机(iOS和Android)上打开PDF,但无论他们使用什么应用程序来阅读PDF,而不是在Unity应用程序中 我已经尝试了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
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");
}