Codenameone 代码名一捕获API正确用法
我尝试使用以下代码,目的是用真实设备(Android和iPhone)录制一些视频,并查看生成的文件大小。但它不起作用。。。它似乎在录制视频,但它既不在Android上也不在iOS上播放生成的视频 我将代码名One 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
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类型。