首页 > 解决方案 > 如何通过 Android 应用程序将照片保存在手机或 SD 卡中

问题描述

我是android studio的初学者。我想构建一个相机应用程序,只是简单地拍照并保存到sd卡,但应用程序不能正常工作。照片没有保存到手机/sd卡。我也允许xml 文件。当我运行我的应用程序时,该应用程序可以拍照但不保存它。下面是我的代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.my_image);
        take_photo = (Button) findViewById(R.id.take_photo);
        take_photo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(flag == 0) {

                    // -- code for taking photo --

                    Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(i, requestCode);

                } else if(flag == 1) {

                    //--- code for saving photo ---

                    savePhotoToMySdCard(b);

                    Toast.makeText(getApplicationContext(), "Photo saved to sd card!", Toast.LENGTH_SHORT).show();

                    flag = 0;
                    take_photo.setText("Take Photo");

                }

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(this.requestCode == requestCode && resultCode == RESULT_OK && data != null){

            b = (Bitmap) data.getExtras().get("data");

            iv.setImageBitmap(b);

            flag = 1;
            take_photo.setText("Save Photo");

        }

    }
    private void savePhotoToMySdCard(Bitmap bit){

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HH_mm_ss");
        String pname = sdf.format(new Date());
        String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        File folder = new File(root+"/SCC_Photos");
        folder.mkdirs();

        File my_file = new File(folder, pname+".jpeg");
        if(my_file.exists())
            my_file.delete();

        try {

            FileOutputStream stream = new FileOutputStream(my_file);
            bit.compress(Bitmap.CompressFormat.JPEG, 90, stream);
            stream.flush();
            stream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

标签: android

解决方案


    take_photo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag == 0) {
                // -- code for taking photo --
                Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(i, requestCode);
            } else if(flag == 1) {
                int check = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
                if (check != PackageManager.PERMISSION_GRANTED)
                    requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
                else {
                    //--- code for saving photo ---
                    savePhotoToMySdCard(b);
                    Toast.makeText(getApplicationContext(), "Photo saved to sd card!", Toast.LENGTH_SHORT).show();
                    flag = 0;
                    take_photo.setText("Take Photo");
                }
            }
        }
    });

推荐阅读