8
votes

BackgroundDownloader ne fonctionne pas pour Windows 10 Mobile UWP?

Je crée une application UWP Windows 10 UWP, qui implique l'arrière-planDownloader, ce ne fonctionne que dans le bureau et non sur le téléphone.

code: p>

    var dl = new BackgroundDownloader();
    dl.CostPolicy = BackgroundTransferCostPolicy.Always;
    file = await localSoundsFolder.CreateFileAsync(name, CreationCollisionOption.ReplaceExisting);
    if (file != null)
    {
        var d = dl.CreateDownload(new Uri(uriToDownloadFrom,UriKind.RelativeOrAbsolute), file);
        d.Priority = BackgroundTransferPriority.High;

        var progressCallback = new Progress<DownloadOperation>(x => DownloadProgress(x, sc)); 
        try
        {
            await d.StartAsync().AsTask(cancellationToken.Token,progressCallback);
            //After this line it doesn't progress!
            CancellationTokenSource token = Utility.cancellationList[sc];
            if (token != null)
            {
                token.Cancel();
                Utility.cancellationList.Remove(sc);
                Debug.WriteLine("The sc has been removed from the download list");
            }
        }
        catch
        {
            return;
        }
    }


private static void DownloadProgress(DownloadOperation download,SoundClass sc)
{
    Debug.WriteLine("Callback");
    var value = download.Progress.BytesReceived * 100 / download.Progress.TotalBytesToReceive;
    Debug.WriteLine("The bytesReceived is {0} and total bytes is {1}", download.Progress.BytesReceived.ToString(), download.Progress.TotalBytesToReceive.ToString());
    new System.Threading.ManualResetEvent(false).WaitOne(10);
    sc.downloadProgress = value;
    if (download.Progress.Status == BackgroundTransferStatus.Completed || value >= 100)
    {
        Debug.WriteLine("DONE donwloading the file {0}", download.ResultFile.Name);
        Debug.WriteLine("The file name happened to be to be added was " + download.ResultFile.Name);
        string fileName = download.ResultFile.Name;
    }
}


7 commentaires

C'est juste un conseil, mais lors du démarrage de l'application après la résiliation précédente, vous devez énumérer toutes les téléchargements existantes et les raattacher à la session en cours. BackgroundDownloader ne prend pas en charge les téléchargements concurrents de la même Uri, donc s'il y a une téléchargement accrochée quelque part, cela peut causer le problème. Voir msdn.microsoft.com/Library/windows/apps/br207126


Merci pour la pointe Liero, essayé cela, mais cela ne fonctionne toujours pas.


J'ai testé votre code dans l'émulateur mobile 10.0.10240 sans SoundClass Comme je ne sais pas ce que c'est et que votre code fonctionne bien. Testez-vous dans l'émulateur ou dans un réel? Voici un échantillon de transfert d'arrière-plan de Microsoft, vous peut le tester avec l'URI que vous avez utilisé dans votre code pour voir si cela fonctionne.


J'ai essayé avec une autre URI qui était une source différente et cela a fonctionné. Mais je me demandais ce qui pourrait être faux du côté serveur car l'URI que je génère est parfait et fonctionne sur le navigateur et le mode de bureau de l'application? EDIT: essayé sur un téléphone différent et ça marche là aussi. Je suppose donc que le problème est avec le téléphone.


@Absoluteith l'avez-vous résolu? J'ai le même problème sur mon Lumia 920.


Eh bien, je l'ai essayé sur un téléphone différent et ça a fonctionné. Je ne sais pas comment je l'ai résolu sur le téléphone, peut-être que les mises à jour fixes.


Je sais que c'est un post un peu plus ancien, mais j'avais le même problème et je pense qu'il peut y avoir une limite de tailles de fichier de téléchargement qui varie selon le périphérique. J'ai une carte SD de 32 Go et il ne passera pas de fichier 6 Go, mais j'ai pu effectuer plusieurs fichiers de 4 Go du même répertoire.


3 Réponses :


0
votes

Backgrounddownloader et je pense que tous les backgroundTasks dans Windows UWP sont difficiles à travailler avec eux. Vous devez d'abord créer une nouvelle solution dans votre solution actuelle en tant que composant d'exécution Windows. Après cela, vous devez le lier via Package.AppxManifest. Euh, n'oubliez pas de faire le composant d'exécution comme référence de votre projet principal. Si vous faites ces choses, j'espère que cela doit fonctionner. Mais assurez-vous que vous avez un runtimecomonent et que vous l'avez associé à votre projet


1 commentaires

Je doute fortement que nous ayons besoin de créer un fond de fond afin d'avoir un téléchargement de fond. Donc, ce n'est pas vraiment une solution.



0
votes

Nous avons eu du mal avec exactement le même problème, mais sur une application universelle de Windows 10 - Pas de téléphone. Le coupable dans notre cas était le mode économiseur de batterie de Windows 10. Sur un périphérique Windows 10, appuyez sur l'icône de la batterie. Cela devrait apparaître la batterie et la luminosité de l'écran. Désactiver le mode de la batterie.

L'effet était le même pour toute application à l'aide du téléchargeur d'arrière-plan, y compris l'exemple de l'exemple de téléchargement MSDN.

Encore une fois, ce n'était pas sur mobile, mais cela a toujours eu lieu sur notre application Windows 10. J'espère que c'est semblable au téléphone.


0 commentaires

0
votes

Dans mon cas, le même code ne fonctionne pas dans Débogou en connectant le téléphone à l'ordinateur portable avec câble USB , mais cela fonctionne en téléchargeant et en installant l'application dans version mode.


0 commentaires