如何设置快照文件的名称

时间:2014-06-02 20:22:27

标签: camera java-me snapshot

我正在开发一个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目录不包含任何快照文件 我在每次运行期间都执行了以下操作:

  1. 我激活了命令
  2. 我对以下权利请求对话框的回答是肯定的:
    1. 允许应用程序读取用户数据吗?
    2. 允许应用程序写入用户数据吗?
    3. 允许应用程序读取用户数据吗?
    4. 允许应用程序写入用户数据吗?
    5. 允许应用程序使用相机拍摄吗?
    6. 允许应用程序读取用户数据吗?
    7. 允许应用程序写入用户数据吗?
  3. 第一次运行后创建了AC0000.jpg快照文件 第二次运行后,AC0000.jpg图片文件被替换。

    我不希望我的应用程序替换过去运行期间拍摄的快照 如何在拍摄快照之前设置快照文件的名称?
    是否可以在前缀和后缀之间设置字符串?

    非常感谢任何帮助

2 个答案:

答案 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();
            }
        }
    }
}