DownloadManager在某些设备上不起作用

时间:2020-02-28 15:44:44

标签: xamarin.android android-download-manager

我使用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);
        }

0 个答案:

没有答案