2017-08-11 9 views
0

大きなファイル(約650MB)をダウンロードする必要があるアプリを作成しています。私は現在このメソッドを使ってファイルをダウンロードしています。 http://answers.unity3d.com/questions/322526/downloading-big-files-on-ios-www-will-give-out-of.htmlユニティアプリケーションが一時停止している間は、ダウンロードを続行してください。 AndroidとiOS

アプリがバックグラウンドに送信されるか、一時停止するとダウンロードが失敗します。私のアプリはGear VR用であるため、ヘッドセットをオフにしておくと、基本的にすべてのユーザーに行われるようになります。

私は答えがAndroidサービスを使用することと関係しているかもしれないと思いますが、それをどうやって解決するのか、それを解決する正しい方法であるかはわかりません。

+0

あなたは正しい方向にあります。 * Androidサービス*が必要です。 Javaからサービスを開始する必要があり、C#コードではなくJavaコードでダウンロードする必要があります。これをプラグインといいます。リンクしたコードは何とか役に立たない。それをJavaへの書き込み/移植の参照としてのみ使用できます。サービスを開始すると、サービスにファイルのダウンロードを指示できます。 Unityが閉じられると、ダウンロードは続行されます。 iOSの場合、JavaではなくObject-Cを使用してサービスを作成する必要があります。これらは簡単なものではありませんが、それらをGoogle検索すると助けてください。 – Programmer

答えて

0

ここに私のコードがあります。 ここに見つかりました。 Downloading large file in Unity3d using WebClient これはこれに最適な方法のようですか?また、iOSにはどうすればよいですか?

void DownloadFile() 
{ 
    loadingBar.gameObject.SetActive(true); 
    downloadButton.SetActive(false); 
    downloadingFile = true; 
    WebClient client = new WebClient(); 
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); 
    client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(DownloadFileCompleted); 
    client.DownloadFileAsync(new Uri(url), Application.persistentDataPath + "/" + fileName); 
} 

void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
{ 
    double bytesIn = double.Parse(e.BytesReceived.ToString()); 
    double totalBytes = double.Parse(e.TotalBytesToReceive.ToString()); 
    double percentage = bytesIn/totalBytes * 100; 
    downloadProgressText = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive; 
    downloadProgress = int.Parse(Math.Truncate(percentage).ToString()); 
    totalBytes = e.TotalBytesToReceive; 
    bytesDownloaded = e.BytesReceived; 
} 

void DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 
{ 
    if (e.Error == null) 
    { 
     AllDone(); 
    } 
} 

void AllDone() 
{ 
    Debug.Log("File Downloaded"); 
    FileExists = 1; 
} 

public void DeleteVideo() 
{ 
    print("Delete File"); 
    PlayerPrefs.DeleteKey("videoDownloaded"); 
    FileExists = 0; 
    enterButton.SetActive(false); 
    downloadButton.SetActive(true); 
    File.Delete(Application.persistentDataPath + "/" + fileName); 
} 
関連する問題