我使用DownloadManager类,排队方法在我的应用程序中下载了文件。 它不适用于某些设备,例如Moto G系列Android 9,Google Pixel系列Android 10。 当他们单击下载时,没有任何反应。 我尝试了Google Pixel Android 9模拟器,并且效果很好。 不幸的是,我没有任何Moto或Google设备来测试它们或Android 10模拟器。 我将DownloadManager与API的URL一起使用,该URL重定向到另一台服务器上的另一个File。 另外,我问一位拥有Google Pixel的朋友,他告诉我下载没有下载。 之后,我请他尝试使用浏览器访问API网址并开始下载。
这是代码。
public static TaskCompletionSource<bool> PermissionResultReceiver = new TaskCompletionSource<bool>();
public async void Download(int id)
{
_id = id;
string Folder = "Google Camera";
MainActivity.CurrentInstance.RequestPermissions(new string[] { Manifest.Permission.WriteExternalStorage }, reqCode);
if (!await PermissionResultReceiver.Task)
return;
Directory.CreateDirectory(Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, Folder));
ClearFolders();
var fullurl = new Android.Net.Uri.Builder();
fullurl.Scheme("http");
fullurl.EncodedAuthority("xxxxxxxxxxx");
fullurl.AppendPath("api");
fullurl.AppendPath("values");
fullurl.AppendPath(id.ToString());
var req = new DownloadManager.Request(fullurl.Build());
Guid apkid = Guid.NewGuid();
fullPathGcam = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, Folder, apkid + ".apk");
req.SetDestinationInExternalPublicDir(Folder, apkid + ".apk");
var un = DownloadManager.FromContext(MainActivity.CurrentInstance);
var requestId = un.Enqueue(req);
ApkId = requestId;
IntentFilter intent = new IntentFilter(DownloadManager.ActionDownloadComplete);
MainActivity.CurrentInstance.RegisterReceiver(receiver, intent);
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == DownloadApk.reqCode)
if(grantResults[0] == Permission.Granted)
DownloadApk.PermissionResultReceiver.TrySetResult(true);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}