我正在开发一个J2ME应用程序,可以在我的W595索尼爱立信手机上运行 我的应用程序使用JSR 135 Mobile Media API和JSR 234 Advanced Multimedia Supplements API。
我的应用程序显示一个表格 相机视频显示在表格的项目中 表格有一个命令 当用户激活命令时,应用程序会拍摄快照 快照文件将保存到记忆棒上的Picture目录中。
这是Form的commandAction事件监听器:
public void commandAction(Command arg0, Displayable arg1) {
m_snapshotControl.setDirectory("e:/Picture");
m_snapshotControl.setFilePrefix("AC");
m_snapshotControl.setFileSuffix(".JPG");
int[]resolutions = m_cameraControl.getSupportedStillResolutions();
int maxValue = (resolutions.length / 2) - 1;
m_cameraControl.setStillResolution(maxValue);
m_snapshotControl.start(1);
}
我跑了2次申请 第一次运行之前,Picture目录不包含任何快照文件 我在每次运行期间都执行了以下操作:
第一次运行后创建了AC0000.jpg快照文件 第二次运行后,AC0000.jpg图片文件被替换。
我不希望我的应用程序替换过去运行期间拍摄的快照
如何在拍摄快照之前设置快照文件的名称?
是否可以在前缀和后缀之间设置字符串?
非常感谢任何帮助
答案 0 :(得分:2)
我还没有试过这个特定的手机,但是这个怎么样:
private int iSnapshotCounter = 0;
public void commandAction(Command arg0, Displayable arg1) {
m_snapshotControl.setDirectory("e:/Picture");
m_snapshotControl.setFilePrefix("AC");
m_snapshotControl.setFileSuffix( (++iSnapshotCounter) + ".JPG");
int[]resolutions = m_cameraControl.getSupportedStillResolutions();
int maxValue = (resolutions.length / 2) - 1;
m_cameraControl.setStillResolution(maxValue);
m_snapshotControl.start(1);
}
如果可行,您可以决定在文件名中包含日期和时间(例如,到第二个)。
当然,如果setFileSuffix()不允许您指定多个文件扩展名,则可以尝试在前缀字符串上使用相同的技巧。
您可能还需要使用JSR-75来确定文件夹中已存在的文件。
答案 1 :(得分:2)
我已将一个PlayerListener添加到SnapshotControl的播放器中 当发生SHOOTING_STOPPED事件时,我的playerUpdate方法重命名创建的Snapshot文件 新名称由当前日期和时间部分组成 新名称的格式为YYYYMMDD_HHMMSS.jpg 这是playerUpdate方法:
public void playerUpdate(Player arg0, String arg1, Object arg2) {
if (arg1.equalsIgnoreCase(SnapshotControl.SHOOTING_STOPPED)) {
FileConnection fconn = null;
try {
fconn = (FileConnection)Connector.open("file:///e:/Picture/" + (String)arg2);
Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
StringBuffer buffer = new StringBuffer();
buffer.append(calendar.get(Calendar.YEAR));
int month = calendar.get(Calendar.MONTH);
month++;
if (month < 10) {
buffer.append(0);
}
buffer.append(month);
int day = calendar.get(Calendar.DAY_OF_MONTH);
if (day < 10) {
buffer.append(0);
}
buffer.append(day);
buffer.append("_");
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour < 10) {
buffer.append(0);
}
buffer.append(hour);
int minute = calendar.get(Calendar.MINUTE);
if (minute < 10) {
buffer.append(0);
}
buffer.append(minute);
int second = calendar.get(Calendar.SECOND);
if (second < 10) {
buffer.append(0);
}
buffer.append(second);
buffer.append(".jpg");
fconn.rename(buffer.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fconn.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}