Android 使用字符串作为照片Uri?

Android 使用字符串作为照片Uri?,android,string,file,uri,android-file,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++;

我需要为使用我的应用程序拍摄的每张照片创建一个新的文件名/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);
        }
    }); 

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

我建议将count int移到onClickListener之外,否则它将始终包含值2,因为每次单击都会一次又一次地实例化它


您还需要在应用程序关闭时记录该数字的最后一次使用情况,否则您将有覆盖图像的风险。

代码中的问题是每次单击时计数都将重置为1,因为您在OnClick Listener中声明并实例化了它

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

所以你应该把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();
    }
}

如果你已经写了所有的代码。。。为什么不试试呢?您应该更改的一件事是字符串/sdcard应该被Environment.getExternalStorageDirectory替换,以便它可以在所有设备上工作