使用字符串照片Uri?

时间:2012-06-15 23:10:14

标签: android string file uri android-file

我需要为使用我的应用拍摄的每张照片创建一个新的文件名/ Uri。他们拍摄的第一张照片是“/sdcard/mirror1.jpg”,然后拍摄的下一张照片将是“mirror2.jpg”,依此类推。到目前为止,这是我的代码:

 capture.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            int count = 1;
            count++;

            String fileName = new String("/sdcard/mirror" + count + ".jpg");

            File thing = new File(fileName);
            Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(thing));
            startActivityForResult(intent, CAMERA_PIC_REQUEST);
            text.setVisibility(View.GONE);
        }
    }); 

这会有用吗?我可以添加您需要的任何额外代码/细节。

2 个答案:

答案 0 :(得分:0)

我建议移动"计数"在onClickListener之外的int,否则它将始终包含值" 2"因为每次点击都会一次又一次地实例化。

您还需要在应用程序关闭时记录该号码的最后一次使用,否则您将面临覆盖图像的风险。

答案 1 :(得分:0)

代码中的问题是每次点击时计数总是会重置为1(因为你在onClickListener中声明并实例化它)。

即使您解决了这个问题,当您关闭应用或活动时,您也会失去进展。

所以你应该将count的值存储在某个地方。

执行此操作的最佳方法是使用共享首选项。

所以你的代码看起来应该是这样的

capture.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //read count from Shared Preferences
        SharedPreferences settings = getSharedPreferences("YourPrefName", 0);
        int count = settings.getInt("imageCount", 1);

        String fileName = new String("/sdcard/mirror" + count + ".jpg");

        File thing = new File(fileName);
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(thing));
        startActivityForResult(intent, CAMERA_PIC_REQUEST);
        text.setVisibility(View.GONE);
    }
}); 

我们会检查照片是否成功拍摄,而不是在此处增加计数。我们在onActivityResult中这样做。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CAMERA_PIC_REQUEST && resultCode == RESULT_OK) {
        SharedPreferences settings = getSharedPreferences("YourPrefName", 0);
        int count = settings.getInt("imageCount", 1);
        ++count;
        SharedPreferences.Editor editor = settings.edit();
        editor.putInt("imageCount", count);
        editor.commit();
    }
}