实现下载进度条

Implement download progress bar

下载文件时,会在通知或某处显示下载进度。 但我认为它在 cn1 应用程序中不是默认的。我想添加进度侦听器。如何让它发挥作用??

if (!FileSystemStorage.getInstance().exists(filename)) {               
        com.codename1.io.Util.downloadUrlToFile(PdfUrl, filename, true);
}

浏览器在本地下载文件的方式是浏览器的特例,与应用程序无关。您可以只调用 Display.execute 文件,浏览器将以这种方式下载它,尽管我猜它不是您想要的,因为事后您将无法访问它。

您可以使用 NetworkManager 的进度侦听器显示进度。在通知区域显示进度是 Android 的特定行为,在 iOS 上并不常见。但是您也许可以使用一些本地通知功能 https://www.codenameone.com/blog/local-notifications.html

在我的例子中使用了下面的代码。

/**
 * Adaptation of Util.downloadUrlTo
 */
private boolean downloadUrlToAdapt(String url, final String fileName, boolean storage, final Slider slider) {
    final ConnectionRequest cr = new ConnectionRequest();
    cr.setPost(false);
    cr.setFailSilently(true);
    cr.setUrl(url);
    if (storage) {
        cr.setDestinationStorage(fileName);
    } else {
        cr.setDestinationFile(fileName);
    }

    NetworkManager.getInstance().addProgressListener(new ActionListener() {
        public void actionPerformed(ActionEvent evt) {
            if (evt instanceof NetworkEvent) {
                NetworkEvent e = (NetworkEvent) evt;
                if (e.getProgressPercentage() >= 0) {
                    slider.setText(e.getProgressPercentage() + "%");
                    slider.setProgress(e.getProgressPercentage());
                }
            }
        }
    });
    NetworkManager.getInstance().addToQueueAndWait(cr);

    return cr.getResponseCode() == 200;
}

我需要显示视频下载进度。希望对你有帮助。

我使用它的方式与 Sadart Abukari 相同。

我唯一改变的是我使用 ToastBar.Status 来显示进度

[...]
    NetworkManager.getInstance().addProgressListener((evt) -> {
        if (evt instanceof NetworkEvent) {
            NetworkEvent e = (NetworkEvent) evt;
            if (e.getProgressPercentage() >= 0) {
                status.setProgress(e.getProgressPercentage());
            }
        }
    });

    NetworkManager.getInstance().addToQueueAndWait(cr);
    //Clear the ToastBar
    status.clear();
    return cr.getResponseCode() == 200;
}