private IEnumerator CaptureScreenshot(BlankAction finshCallBack) { yield return(new WaitForEndOfFrame()); Texture2D texture2D = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); texture2D.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0); texture2D.Apply(); byte[] bytes = texture2D.EncodeToJPG(); if (OnCaptureScreenshot != null) { OnCaptureScreenshot(texture2D); } else { DestroyImmediate(texture2D); } string filePath = Application.persistentDataPath + "/screenshots/" + DateTime.Now.ToFileTime() + ".jpg"; File.WriteAllBytes(filePath, bytes); Debug.Log("图片保存完成 保存路径 : " + filePath); SaveGalleryScreenshot(filePath); if (finshCallBack != null) { finshCallBack(); } }
/// <summary> /// 开始下载文件 /// </summary> /// <param name="downloadurl">下载地址</param> /// <param name="saveFileName">文件保存位置。包含文件的保存路径和完整的文件名</param> /// <param name="downloadingCallback">下载中的回调</param> /// <param name="downloadedFinshCallback">下载完成后的回调</param> /// <param name="downloadErrorCallBack">下载错误回调</param> /// <param name="isResetDownload">标记是否强制重新下载</param> /// <param name="data">下载任务的附加数据</param> /// <param name="mtag">下载任务的附加数据</param> /// <returns></returns> public HTTPRequest DownLoad(string downloadurl, string saveFileName, BlankActionForDownloadItemModel downloadingCallback, BlankActionForDownloadItemModel downloadedFinshCallback, BlankAction downloadErrorCallBack, bool isResetDownload = false, string data = "", string mtag = "") { if (!Directory.Exists(saveFileName)) { Directory.CreateDirectory(Path.GetDirectoryName(saveFileName)); } if (m_downloadHttpRequests.ContainsKey(downloadurl)) { if (m_downloadItemModels.ContainsKey(downloadurl)) { DownloadItemModel downloadItemModel = m_downloadItemModels[downloadurl]; downloadItemModel.DownloadingCallback = downloadingCallback; downloadItemModel.DownloadedFinshCallback = downloadedFinshCallback; } // 下载中 return(m_downloadHttpRequests[downloadurl]); } else { // 未下载中 // 读取 断点数据 DownloadItemModel downloadItemModel = ReadProcessFragmentsData(saveFileName, isResetDownload); if (string.IsNullOrEmpty(downloadItemModel.ID)) { downloadItemModel.ID = DateTime.Now.ToFileTime().ToString(); } downloadItemModel.Data = data; downloadItemModel.Tag = mtag; downloadItemModel.LastDownloadTimeSpan = Time.realtimeSinceStartup; downloadItemModel.DownloadUrl = downloadurl; downloadItemModel.FileSaveName = saveFileName; downloadItemModel.DownloadingCallback = downloadingCallback; downloadItemModel.DownloadedFinshCallback = downloadedFinshCallback; HTTPRequest httpRequest = new HTTPRequest(new Uri(downloadurl), (req, rep) => { if (rep != null) { if (downloadItemModel.DownloadSize <= 0) { string contentLength = rep.GetFirstHeaderValue("content-length"); downloadItemModel.DownloadSize = long.Parse(contentLength); } } switch (req.State) { case HTTPRequestStates.Initial: break; case HTTPRequestStates.Queued: break; case HTTPRequestStates.Processing: { downloadItemModel.IsDownloadFinsh = false; ProgressDownloadData(saveFileName, rep, downloadItemModel); // 下载中的回调 if (downloadItemModel.DownloadingCallback != null) { try { downloadingCallback(downloadItemModel); } catch (Exception exception) { Debug.LogError("DownloadURL:" + downloadurl + exception.Message + exception.Source + exception.TargetSite + downloadItemModel.ToString()); throw; } } } break; case HTTPRequestStates.Finished: if (rep != null && rep.IsSuccess) { ProgressDownloadData(saveFileName, rep, downloadItemModel); if (rep.IsStreamingFinished) { UpdateDownloadFinshState(downloadItemModel); // 下载完成后回调 if (downloadedFinshCallback != null) { try { downloadedFinshCallback(downloadItemModel); } catch (Exception exception) { Debug.LogError("DownloadURL:" + downloadurl + exception.Message + exception.Source + exception.TargetSite + downloadItemModel.ToString()); throw; } } Log.I("下载完成"); } StopDownLoad(downloadItemModel.DownloadUrl); } break; case HTTPRequestStates.Aborted: { // 下载 终止 Log.I(string.Format(" 下载任务 {0} 终止 ", downloadurl)); NotificationManager.Instance.PostNotification(DownLoadManagerNotificationConst.DOWN_LOAD_MANAGER_TASK_STOP, downloadurl, DownLoadManagerNotificationConst.DOWN_LOAD_MANAGER_FILTER); } break; case HTTPRequestStates.Error: case HTTPRequestStates.ConnectionTimedOut: case HTTPRequestStates.TimedOut: { if (downloadErrorCallBack != null) { downloadErrorCallBack(); } // 下载错误 Log.I(string.Format(" 下载任务 {0} 错误 ", downloadurl)); NotificationManager.Instance.PostNotification(DownLoadManagerNotificationConst.DOWN_LOAD_MANAGER_TASK_ERROR, downloadurl, DownLoadManagerNotificationConst.DOWN_LOAD_MANAGER_FILTER); } break; } }) { IsKeepAlive = true, DisableCache = true, UseStreaming = true, StreamFragmentSize = HTTPResponse.MinBufferSize * 100, ConnectTimeout = TimeSpan.FromSeconds(5), Timeout = TimeSpan.FromSeconds(5) }; if (downloadItemModel.IsDownloadFinsh) { Log.I("已经下载过该文件" + downloadItemModel.ModelToJsonString()); UpdateDownloadFinshState(downloadItemModel); // 下载完成后回调 if (downloadedFinshCallback != null) { try { downloadedFinshCallback(downloadItemModel); } catch (Exception exception) { Debug.LogError("DownloadURL:" + downloadurl + exception.Message + exception.Source + exception.TargetSite + downloadItemModel); throw; } } return(httpRequest); } if (downloadItemModel.DownloadedSize > 0) { httpRequest.SetRangeHeader((int)downloadItemModel.DownloadedSize); httpRequest.Tag = downloadItemModel.DownloadedSize; Log.I(" 开始断点下载 " + downloadItemModel.ModelToJsonString()); } else { DataCacheManager.Instance.AppendList(downloadItemModel, DOWN_LOAD_MANAGER_MODULE_NAME); } httpRequest.Send(); m_downloadItemModels.Add(downloadurl, downloadItemModel); m_downloadHttpRequests.Add(downloadurl, httpRequest); return(httpRequest); } }
/// <summary> /// 获取下载文件的内容长度 /// </summary> /// <param name="downloadurl">下载地址</param> /// <param name="contentLengthSize">请求成功回调 ,包含 内容长度</param> /// <param name="errorCallBack">请求错误</param> /// <returns></returns> public HTTPRequest GetContentLength(string downloadurl, BlankActionForLong contentLengthSize, BlankAction errorCallBack) { HTTPRequest httpRequest = new HTTPRequest(new Uri(downloadurl), (req, rep) => { if (rep != null) { string contentLength = rep.GetFirstHeaderValue("content-length"); if (contentLengthSize != null) { StopDownLoad(downloadurl); contentLengthSize(long.Parse(contentLength)); } } switch (req.State) { case HTTPRequestStates.Initial: break; case HTTPRequestStates.Queued: break; case HTTPRequestStates.Processing: break; case HTTPRequestStates.Finished: break; case HTTPRequestStates.Error: case HTTPRequestStates.Aborted: case HTTPRequestStates.ConnectionTimedOut: case HTTPRequestStates.TimedOut: if (errorCallBack != null) { errorCallBack(); } break; default: throw new ArgumentOutOfRangeException(); } }); httpRequest.Send(); m_downloadHttpRequests.Add(downloadurl, httpRequest); return(httpRequest); }
/// <summary> /// 截屏 并保存到相册 /// </summary> public void SaveGalleryScreenshot(BlankAction finshCallBack) { StartCoroutine(CaptureScreenshot(finshCallBack)); //MusicManager.Instance.PlayOneShotAudio(Resources.Load("Audios/photo_graph_effect") as AudioClip); }