Codenameone 实现下载进度条

Codenameone 实现下载进度条,codenameone,Codenameone,下载文件时,它会在通知或其他地方显示下载进度。 但我认为它不是默认的cn1应用程序。我想添加进度侦听器。如何让它工作 if (!FileSystemStorage.getInstance().exists(filename)) { com.codename1.io.Util.downloadUrlToFile(PdfUrl, filename, true); } 浏览器本地下载文件的方式是浏览器的特例,与应用程序无关。你可以用一个文件调用Displ

下载文件时,它会在通知或其他地方显示下载进度。 但我认为它不是默认的cn1应用程序。我想添加进度侦听器。如何让它工作

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

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


您可以使用
NetworkManager
的进度侦听器显示进度。在通知区域显示进度是Android特有的行为,在iOS上并不常见。但是您可能可以使用一些本地通知功能,在我的例子中,您可以使用下面的代码

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

我需要显示视频下载进度。我希望它能帮上忙。

我和萨达特·阿布卡里一样使用它

我唯一改变的是我使用了
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;
}

谢谢你@Sadart Abukari。。。你也实施过取消下载吗?这非常有帮助…@beck您可以使用ConnectionRequest的kill()方法取消下载。建议如下。这意味着上面的downloadUrlToAdapt方法不会只返回responseCode。它必须返回包含responseCode状态和ConnectionRequest对象本身的数组或hashmap,以便kill()方法可以在任何地方对其进行操作。