【问题标题】:Use String for photo Uri?使用字符串作为照片 Uri?
【发布时间】:2012-06-15 23:10:13
【问题描述】:

我需要为使用我的应用拍摄的每张照片创建一个新的文件名/U​​ri。他们拍摄的第一张照片将是“/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);
        }
    }); 

这行得通吗?我可以添加您需要的任何额外代码/详细信息。

【问题讨论】:

  • 如果你已经编写了所有的代码......你为什么不试试呢?
  • 您应该更改的一件事是字符串“/sdcard”应该替换为 Environment.getExternalStorageDirectory() 以便它适用于所有设备

标签: android string file uri android-file


【解决方案1】:

我建议将“count” int 移到 onClickListener 之外,否则它将始终包含值“2”,因为它将在每次点击时一次又一次地实例化。

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

【讨论】:

    【解决方案2】:

    您的代码中的问题是每次点击时计数将始终重置为 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2011-12-17
      • 2013-06-25
      • 2011-03-30
      相关资源
      最近更新 更多