实施下载进度条

时间:2015-12-23 05:27:29

标签: codenameone

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

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

3 个答案:

答案 0 :(得分:1)

在我的案例中使用了以下代码。

/**
 * 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;
}

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

答案 1 :(得分:0)

浏览器在本地下载文件的方式是浏览器的特殊情况,与应用程序无关。你只需用一个文件调用Display.execute,浏览器就会以那种方式下载它,虽然我猜它不是你想要的,因为事后你无法访问它。

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

答案 2 :(得分:0)

我和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;
}