在SD卡Android Studio上保存捕获的图像
这是我的代码,我想创建一个应用程序来存储相机拍摄的照片,并将其保存在SD卡上。尽管照片保存在手机内存中,但不在SD卡中,请帮助我在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);
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卡。你的代码没有带来什么新东西。