Codenameone 代码名一捕获API正确用法

Codenameone 代码名一捕获API正确用法,codenameone,Codenameone,我尝试使用以下代码,目的是用真实设备(Android和iPhone)录制一些视频,并查看生成的文件大小。但它不起作用。。。它似乎在录制视频,但它既不在Android上也不在iOS上播放生成的视频 我将代码名One API中的一些示例合并在一起,编写了以下代码。怎么了 Form hi = new Form("Capture", BorderLayout.center()); Container cnt = new Container(BoxLayout.y()); hi.s

我尝试使用以下代码,目的是用真实设备(Android和iPhone)录制一些视频,并查看生成的文件大小。但它不起作用。。。它似乎在录制视频,但它既不在Android上也不在iOS上播放生成的视频

我将代码名One API中的一些示例合并在一起,编写了以下代码。怎么了

    Form hi = new Form("Capture", BorderLayout.center());
    Container cnt = new Container(BoxLayout.y());
    hi.setToolbar(new Toolbar());
    Style s = UIManager.getInstance().getComponentStyle("Title");
    FontImage icon = FontImage.createMaterial(FontImage.MATERIAL_VIDEOCAM, s);

    FileSystemStorage fs = FileSystemStorage.getInstance();
    String recordingsDir = fs.getAppHomePath() + "recordings/";
    fs.mkdir(recordingsDir);
    try {
        for (String file : fs.listFiles(recordingsDir)) {
            Button mb = new Button(file.substring(file.lastIndexOf("/") + 1) + " - " + (int) (fs.getLength(recordingsDir + file) / 1024.0 / 1024.0 * 100) / 100.0 + " MB");
            mb.addActionListener((e) -> {
                try {
                    Media video = MediaManager.createMedia(recordingsDir + file, true);
                    hi.removeAll();
                    hi.add(BorderLayout.CENTER, new MediaPlayer(video));
                    hi.revalidate();
                } catch (IOException err) {
                    Log.e(err);
                }
            });
            cnt.add(mb);
        }
        hi.add(BorderLayout.CENTER, cnt);

        hi.getToolbar().addCommandToRightBar("", icon, (ev) -> {
            try {
                String file = Capture.captureVideo();
                if (file != null) {
                    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MMM-dd-kk-mm");
                    String fileName = sd.format(new Date());
                    String filePath = recordingsDir + fileName;
                    Util.copy(fs.openInputStream(file), fs.openOutputStream(filePath));
                    Button mb = new Button(file.substring(file.lastIndexOf("/") + 1) + " - " + (int) (fs.getLength(filePath) / 1024.0 / 1024.0 * 100) / 100.0 + " MB");
                    mb.addActionListener((e) -> {
                        try {
                            Media video = MediaManager.createMedia(filePath, true);
                            hi.removeAll();
                            hi.add(BorderLayout.CENTER, new MediaPlayer(video));
                            hi.revalidate();
                        } catch (IOException err) {
                            Log.e(err);
                        }
                    });
                    cnt.add(mb);
                    cnt.getParent().revalidate();
                }
            } catch (IOException err) {
                Log.e(err);
            }
        });
    } catch (IOException err) {
        Log.e(err);
    }
    hi.show();
这是我在iPhone X上点击一个按钮打开录制的视频后看到的(与我在Android 7上看到的非常相似):


我花了太多时间看这个,真让人尴尬

更改此项:

Form hi = new Form("Capture", BorderLayout.center());
为此:

Form hi = new Form("Capture", new BorderLayout());

前者给出了组件的首选尺寸。后者将其扩展以占用可用空间。大多数平台上的首选大小为零,因为需要加载视频才能应用首选大小。加载时,需要对布局进行回流。

什么不起作用?你没有看到媒体播放器上的播放按钮吗?我刚刚更新了问题,添加了一个屏幕截图。另一个信息:上面的代码在模拟器中工作,但在真正的iPhone和Android设备中不工作。我在我的1+6 pie上实际看到了更糟糕的行为,这可能意味着视频播放的pie出现了倒退。我已经拿出一个旧的设备,现在正在测试它。非常感谢,但是这不是完全分辨率,因为当我点击一个按钮播放录制的视频时,我会看到一个空白的黑屏。我试图添加
mediaPlayer.setAutoplay(true)
但它似乎在Android上工作,但在iOS上不起作用(在模拟器中,我看到在将mediaplayer添加到容器之前或之后,
setAutoplay
在代码中的位置会有所不同)。也许我的代码中还有其他问题。我会更好地调查。尝试添加mp4扩展名,以便我们可以检测文件的正确mime类型。