1 不用自己写下载文件的功能,直接调用系统下载服务
2 forms 接口
3
4 using System;
5 using System.Collections;
6 using System.Collections.Generic;
7
8 namespace
9 {
10 public interface ISystemDownloadFile
11 {
12 //下载文件
13 void DownloadThread (string strUrl,string str1);
14 }
15 }
16
17 平台实现
18 using System;
19 using System.Collections;
20 using System.Collections.Generic;
21 using System.Threading.Tasks;
22 using System.Threading;
23
24 using Xamarin.Forms;
25
26 using Android.Net;
27 using Android.App;
28 using Android.Content;
29 using Android.Widget;
30 using Android.Runtime;
31 using Android.OS;
32 using Android.Telephony;
33 using Android.Util;
34 using Java.Net;
35 using Java.IO;
36 using;
37 using.TDroid;
38
39 [assembly:Dependency(typeof(SystemDownloadFile))]
40 namespace.TDroid
41 {
42 public class SystemDownloadFile : Java.Lang.Object,ISystemDownloadFile
43 {
44
45 private DownloadManager downloadManager;
46 private long downloadId = 0;
47 private string filename;
48
49 public SystemDownloadFile()
50 {
51 initData ();
52 }
53
54 public void DownloadThread(string strUrl,string str1)
55 {
56 getFilename (strUrl);
57
58 string strFolder = Android.OS.Environment.ExternalStorageDirectory + "/Download/";
59 File folder = new File (strFolder);
60 if (!folder.Exists () || !folder.IsDirectory) {
61 folder.Mkdirs ();
62 }
63 DownloadManager.Request request = new DownloadManager.Request (Android.Net.Uri.Parse (strUrl));
64 request.SetDestinationInExternalPublicDir (strFolder, filename);
65 request.SetTitle (filename);
66 request.SetDescription (filename);
67 request.SetNotificationVisibility (DownloadVisibility.VisibleNotifyCompleted);
68 request.SetVisibleInDownloadsUi (false);
69 downloadId = downloadManager.Enqueue (request);
70 }
71
72 /*
73 public async Task SaveTextAsync (string filename, string text)
74 {
75 var docsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
76 var path = Path.Combine(docsPath, filename);
77
78 using (StreamWriter sw = File.CreateText(path))
79 {
80 await sw.WriteAsync(text);
81 }
82 }
83 */
84
85 private void getFilename(string strUrl)
86 {
87 filename = strUrl.Substring (strUrl.LastIndexOf("/")+1);
88
89 }
90
91 private void initData()
92 {
93 downloadManager = (DownloadManager)((Activity)Forms.Context).GetSystemService(Android.Content.Context.DownloadService);
94 }
95 /*
96 public void DownloadThread(string strUrl,string str1)
97 {
98 string strUrl1 = null;
99 string str11 = null;
100 Thread thread = new Thread (delegate(){DownloadFile(strUrl,str1);});
101 strUrl1 = strUrl;
102 str11 = str1;
103 thread.Start ();
104 }*/
105
106 /*
107 public void DownloadFile (string strUrl,string str1)
108 {
109 try {
110 Java.Net.URL url = new Java.Net.URL (strUrl);
111 connection = url.OpenConnection ();
112 if (connection.ConnectTimeout == 5) {
113 Log.Info ("---->", "网络有问题");
114 }
115 //inputStream = connection.InputStream;
116 inputStream = (InputStream)connection.Content;
117 } catch (Exception ex) {
118 //Log.Info ("---->", ex.Data);
119 }
120 string filename = strUrl.Substring (strUrl.LastIndexOf ("/") + 1);
121 string savePath = Android.OS.Environment.ExternalStorageDirectory + "/DownloadFile";
122 File file1 = new File (savePath);
123 if (!file1.Exists()) {
124 file1.Mkdir ();
125 }
126 string savePathString = Android.OS.Environment.ExternalStorageDirectory + "/DownloadFile/" + filename;
127 File file = new File (savePathString);
128 if (!file.Exists()) {
129 try{
130 file.CreateNewFile();
131 }catch(IOEaxception e){
132 }
133 }
134 try{
135 outputStream = new FileOutputStream(file);
136 byte[] buffer = new byte[1024*4];
137 FileLength = connection.ContentLength;
138 while(DownedFileLength < FileLength){
139 outputStream.Write(buffer);
140 DownedFileLength += inputStream.Read(buffer);
141 }
142 }catch(FileNotFoundException e){
143 }catch(IOException e1){
144 }
145
146 }*/
147 }
148 }