在SD卡Android Studio上保存捕获的图像

在SD卡Android Studio上保存捕获的图像,android,Android,这是我的代码,我想创建一个应用程序来存储相机拍摄的照片,并将其保存在SD卡上。尽管照片保存在手机内存中,但不在SD卡中,请帮助我 private Button takePictureButton; private ImageView imageView; private Uri file; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

这是我的代码,我想创建一个应用程序来存储相机拍摄的照片,并将其保存在SD卡上。尽管照片保存在手机内存中,但不在SD卡中,请帮助我

private Button takePictureButton;
private ImageView imageView;
private Uri file;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    takePictureButton = (Button) findViewById(R.id.button_image);
    imageView = (ImageView) findViewById(R.id.imageview);

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        takePictureButton.setEnabled(false);
        ActivityCompat.requestPermissions(this, new String[] { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 0) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            takePictureButton.setEnabled(true);
        }
    }
}

public void takePicture(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    file = Uri.fromFile(getOutputMediaFile());
    intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

    startActivityForResult(intent, 100);
}

private static File getOutputMediaFile(){




    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "CameraDemo");

    if (!mediaStorageDir.exists()){
        if (!mediaStorageDir.mkdirs()){
            Log.d("CameraDemo", "failed to create directory");
            return null;
        }
    }




    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    return new File(mediaStorageDir.getPath() + File.separator +
            "IMG_"+ timeStamp + ".jpg");
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 100) {
        if (resultCode == RESULT_OK) {
            imageView.setImageURI(file);
        }
    }
}
}尝试以下方法

private void saveImageToExternalStorage(String fileName, Bitmap finalBitmap) {

    String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
    File myPicDirectory = new File(root + "/my_pics");
    myPicDirectory.mkdirs();

    File file = new File(myDir, fileName);
    if (file.exists())
    file.delete();
    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); // 90 refers to quality of image
        out.flush();
        out.close();
    }
    catch (Exception e) {
        e.printStackTrace();
    }

}

不要忘了在清单文件中添加权限。

环境。getExternalStoragePublicDirectory
将始终为您提供主共享/外部目录的路径。你可以找到更多关于它的信息

主共享目录可以是用户共享的内部目录,也可以是外部SD卡目录,具体取决于设备的制造商


虽然要在API级别19以上的设备中获取共享/外部目录列表,您可以使用上下文类中的方法

因此,您只想知道如何确定sd卡的路径。无需发布所有代码。如果您有SD卡的路径,您可以使用与现在相同的代码。但是你很快就会发现Android不再允许你在sd卡上写东西了。现在你只能读它。mkdirs()已失败。OP已使用外部存储器。这不是sd卡。你的代码没有带来什么新东西。