以下是一个Java代码示例,可以通过使用Android相机拍摄照片后,将其保存到应用程序的私有存储空间中,而不是存储在设备和SD卡中。
import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class CameraUtils {
public static String saveImage(Context context, Bitmap imageBitmap) throws IOException {
// 创建一个文件名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
String imageFileName = "IMG_" + timeStamp + ".jpg";
// 获取应用程序的私有存储目录
ContextWrapper cw = new ContextWrapper(context.getApplicationContext());
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
// 创建图片文件
File imageFile = new File(directory, imageFileName);
// 保存图片到文件
FileOutputStream fos = new FileOutputStream(imageFile);
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
// 返回图片文件的绝对路径
return imageFile.getAbsolutePath();
}
}
在您的相机活动中,您可以使用以下代码示例来调用上述保存图像的方法:
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
public class CameraActivity extends AppCompatActivity {
private static final int REQUEST_IMAGE_CAPTURE = 1;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camera);
imageView = findViewById(R.id.imageView);
// 启动相机应用程序
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 获取相机返回的照片
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
try {
// 保存照片到应用程序的私有存储空间
String imagePath = CameraUtils.saveImage(this, imageBitmap);
// 在ImageView中显示保存的照片
imageView.setImageBitmap(BitmapFactory.decodeFile(imagePath));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在这个示例中,照片被保存到应用程序的私有存储目录中,而不是设备或SD卡的公共存储位置。这样可以确保照片只能被您的应用程序访问,并提高了用户的隐私和安全性。
上一篇:Android相机拍摄并保存