有关Unity问题的couple times已被问过,但从未接听过。
我需要做的就是创建一个Android pluugin,从给定的网址下载少量文件,并在通知面板中显示下载进度。即使我的Unity应用程序没有聚焦,下载也应该继续。
http://www.cuelogic.com/blog/wp-content/uploads/2013/10/downloadmanager_31230_l.png
以下是我现在的代码:
void DownloadFiles(string[] urls)
{
foreach(var url in urls)
{
StartCoroutine(DownloadFile_CR(url));
}
}
IEnumerator DownloadFile_CR(string url)
{
WWW www = new WWW(url);
while(!www.isDone)
{
yield return null;
}
if(www.error == null)
{
//file downloaded. do something...
}
}
这些是一些纹理文件。那么如何从原生的android代码中获取纹理结果?
感谢任何帮助之王。
答案 0 :(得分:2)
如果你想让它继续,即使团结不在焦点,那么你不能在Unity中使用WWW类在C#中进行。
如果我想这样做,我可能会写一个原生Android插件,开始下载服务。
来自官方谷歌文档:
服务是一个可以执行长时间运行的应用程序组件 在后台运行,它不提供用户 接口。另一个应用程序组件可以启动服务 即使用户切换到后台,也会继续在后台运行 另一个申请。
服务并不复杂,您可以像使用某项活动一样使用Intent启动它们,并且此类服务有很多在线示例。
以下是有关服务的官方Android文档:https://developer.android.com/guide/components/services.html
答案 1 :(得分:2)
我遇到了同样的问题。起初,我使用了一个在后台运行的服务并下载了我需要的文件,包括计算进度和完整事件。
然后,我使我的插件更简单易用。您创建Java对象的实例,为其提供响应的GameObject
名称和方法名称。我使用json
来序列化和反序列化java和C#对象,因为只有字符串可以在Unity的MonoBehaviour
对象和java对象之间传递。
以下是android插件中downnload的外观:
Uri Download_Uri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(Download_Uri);
//Restrict the types of networks over which this download may proceed.
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
//Set whether this download may proceed over a roaming connection.
request.setAllowedOverRoaming(true);
//Set the local destination for the downloaded file to a path within the application's external files directory
String[] split = url.split("/");
request.setDestinationInExternalFilesDir(activity, null, split[split.length-1]);
//Set the title of this download, to be displayed in notifications (if enabled).
request.setTitle("Downloading " + title);
//Set a description of this download, to be displayed in notifications (if enabled)
request.setDescription("Downloading " + name);
request.setVisibleInDownloadsUi(false);
//Enqueue a new download and get the reference Id
long downloadReference = downloadManager.enqueue(request);
然后您可以将参考ID发送回统一,这样您就可以获得进度,并在重新启动应用程序后检查文件是否仍在下载(使用SharedPreferences \ PlayerPrefs存储它们)