现在很长一段时间以来,我一直试图通过DownloadManager下载文件。在android中有很多关于如何做到这一点的例子,但是对于xamarin我不是那么幸运。
我创建了一个API v15(4.0.3)最小的应用程序,并检查是否引用了Mono.Android.dll。还添加了权限INTERNET
和WRITE_EXTERNAL_STORAGE
DownloadManager dm;
dm = (DownloadManager)GetSystemService (Context.DownloadService);
DownloadManager.Request request = new Android.App.DownloadManager.Request (Android.Net.Uri.Parse ("https://www.adress));
request.SetDestinationUri (Android.Net.Uri.Parse (EXTERNAL_DIRECTORY));
var c = dm.Enqueue (request);
每当我点击dm.Enqueue (request);
时都会发生错误:
我也尝试设置SetDestinationInExternalPublicDir
或SetDestinationInExternalPublicDir
没有成功。
...哦,这是我的目录
const string EXTERNAL_DIRECTORY = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + “/ MyAppFolder”;
我不知道我错了什么,请帮帮我。
答案 0 :(得分:2)
您已将目录路径设置为常量字符串。但是你还没有创建同一个目录。所以你需要创建目录然后传递它。创建这样的路径:
public string GetMyAppDir()
{
var path = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads);
var dir = path.AbsolutePath + File.Separator + "MyAppFolder";
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
return dir;
}
然后使用它:
request.SetDestinationUri(Android.Net.Uri.Parse(GetMyAppDir()));
希望它有效。
答案 1 :(得分:1)
诀窍在" Android.Net.Uri.FromFile"位
var dm = (DownloadManager) GetSystemService (Context.DownloadService);
string webUri = "http://somewhere/some.png";
var dir = new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/MyAppFolder/");
if (!dir.Exists ())
dir.Mkdirs ();
var uri = Android.Net.Uri.FromFile (new Java.IO.File (dir.AbsolutePath+"/my.png"));
var request = new DownloadManager.Request (Android.Net.Uri.Parse (webUri));
request.SetDestinationUri (uri);
dm.Enqueue (request);
答案 2 :(得分:1)
我有同样的问题,但是下载管理器已启用,它取决于Android版本,如果它工作与否。你从downloadmanager(取决于Android版本!)得到的是你仍然需要解决的URI。所以我做的是我添加了以下内容来从本地uri(内容:// downloads / my_downloads / 123)中检索文件路径(file:/// path / to / file)。
像这样: DownloadManager downloadManager = (DownloadManager)Application.Context.GetSystemService(Context.DownloadService);
Uri fileUri = downloadManager.GetUriForDownloadedFile(fileReference);
String uriString = fileUri.ToString();
var compareResult = String.Compare("content://", 0, uriString, 0, 10);
if (compareResult == 0)
{
String filePath = "";
String[] filePathColumn = { "_data" };
ContentResolver contentResolver = context.ContentResolver;
var cursor = contentResolver.Query(fileUri, filePathColumn, null, null, null);
cursor.MoveToFirst();
int columnIndex = cursor.GetColumnIndex(filePathColumn[0]);
filePath = cursor.GetString(columnIndex);
cursor.Close();
fileUri = Uri.Parse("file://" + filePath);
}
答案 3 :(得分:0)
我有点惭愧,问题是设备已禁用DownloadManager
个应用。