问题 如何将Android中Camera的图像保存到特定文件夹?


基本上,我想要做的是让用户自己做 folder 然后去一个 activity 包含一个 button 推出 camera

从那里我希望能够启动 camera 并保存 camera 图像到新创建的文件夹中。

我在保存最后一部分时遇到了麻烦 camera 图像到新创建的文件夹中。

这是我的 Code :

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener() {


        EditText text = (EditText)findViewById(R.id.editText1); 
        EditText text2 = (EditText)findViewById(R.id.editText2);



        @Override
        public void onClick(View v) {

            final String name = text.getText().toString();
            final String placeName = text2.getText().toString(); 

            String place = placeName.substring(0,3);
            String direct = name + place ;

            File folder = new File("/sdcard/CameraTest/" + direct + "/");
            folder.mkdirs();

            Intent myIntent = new Intent(CameraTestActivity.this, Press.class);
            myIntent.putExtra("key", "/sdcard/CameraTest/" + direct + "/");
            startActivity(myIntent);

        }
    });

从这里开始我转到这个活动:

public class Press extends Activity {


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.afterenter);
        final String direct = this.getIntent().getStringExtra("key");


        // TODO Auto-generated method stub
        Button p = (Button) findViewById(R.id.button2);
        p.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent camera= new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(camera, 1);

            }
        });



    Button np = (Button) findViewById(R.id.button3);
    np.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent next = new Intent(Press.this, CameraTestActivity.class);
            startActivity(next);
        }
    });         
    }
}

请告诉我怎么做 保存 来自的图像 camera 进入新创建的文件夹。

我希望用户能够服用几个 图片 然后保存这几个 图片 进入该特定文件夹。


3855
2017-09-01 05:59


起源



答案:


在调用相机活动之前添加此代码,

Uri uriSavedImage=Uri.fromFile(new File("/sdcard/flashCropped.png"));
camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(camera, 1);

12
2017-09-01 06:07



什么是“输出”,为什么要起作用?如果不使用某种常数? - Andrew S
MediaStore.EXTRA_OUTPUT是常量 - Teodor
不工作。 EXTRA_OUTPUT存在一些错误。 - zgulser
编辑你的答案 令人困惑的问题 。说 camera 是 intent 代码中的变量。 - sam nikzad


答案:


在调用相机活动之前添加此代码,

Uri uriSavedImage=Uri.fromFile(new File("/sdcard/flashCropped.png"));
camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
startActivityForResult(camera, 1);

12
2017-09-01 06:07



什么是“输出”,为什么要起作用?如果不使用某种常数? - Andrew S
MediaStore.EXTRA_OUTPUT是常量 - Teodor
不工作。 EXTRA_OUTPUT存在一些错误。 - zgulser
编辑你的答案 令人困惑的问题 。说 camera 是 intent 代码中的变量。 - sam nikzad


试试这个....

path = Environment.getExternalStorageDirectory()+“/ photo1.jpg”;

        File file = new File(path);
        Uri outputFileUri = Uri.fromFile(file);
        Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY);

并且你还没有实现onActivityResult ....尝试这可能会对你有所帮助

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    System.gc();
    if (requestCode == CAPTURE_IMAGE_ACTIVITY) {
        if (resultCode == Activity.RESULT_OK) {
            try {
                // Call function MakeFolder to create folder structure if
                // its not created
                if(imageBitmap != null) {
                    imageBitmap = null;
                    imageBitmap.recycle();
                }
                MakeFolder();
                // Get file from temp1 file where image has been stored
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 3;
                imageBitmap = BitmapFactory.decodeFile(path, options);
                imgForPhotograph.setImageBitmap(imageBitmap);
                isImageTaken = true;
                // Name for image
                IMAGEPATH = getString(R.string.chassisImage)
                        + System.currentTimeMillis();
                SaveImageFile(imageBitmap,IMAGEPATH);
            } catch (Exception e) {
                Toast.makeText(this, "Picture Not taken",
                                Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
        }
    }

希望你明白..........


1
2017-09-01 07:14



CAPTURE_IMAGE_ACTIVITY只是一个整数,你可以使用你选择的简单整数值说99/7/67任何东西。它用于检查请求代码。例如,1个活动可以启动许多其他活动,但每个请求都应该有唯一的请求代码,可以在主活动中返回onActivityResult内的每个活动时进行检查。检查请求代码以了解返回了哪个活动。 - Kuntal Basu
@Richa是什么isImageTaken是什么样的isImageTaken变量.... - Amitsharma


您应该将文件位置添加到图像捕获意图。 例如:

camera.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, [file location]);

看一看 这里


0
2017-09-01 06:04