我有一个自定义相机,我想将捕获的图像保存在我SD卡的文件夹中。我看了几个例子,但无论出于何种原因,我都没有得到任何保存(文件夹或图像)。以下是我的代码。如果有人可以提供帮助,那就太好了!我已经将android.permission.WRITE_EXTERNAL_STORAGE添加到我的清单中。
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCamera.takePicture(null, null, mPicture);
mCamera = getCameraInstance();
mPreview = new CameraPreview(CameraActivity.this, mCamera);
FrameLayout preview = (FrameLayout)findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
private Camera getCameraInstance() {
// TODO Auto-generated method stub
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e) {
}
return c;
}
private PictureCallback mPicture = new PictureCallback() {
public void onPictureTaken(byte[] datas, Camera camera) {
// TODO Auto-generated method stub
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(datas);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
private File getOutputMediaFile() {
// TODO Auto-generated method stub
File root = Environment.getExternalStorageDirectory();
File myDir = new File(root + "/NewFolder/");
myDir.mkdirs();
if (myDir.exists()){
}
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image"+ n +".jpg";
File file = new File (myDir, fname);
Uri uriSavedImage = Uri.fromFile(file);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
i.putExtra("output", uriSavedImage);
return file;
};
答案 0 :(得分:0)
首先请确保您已在清单中提供了WRITE_EXTERNAL_STORAGE权限。
在某些手机上,当您从FileOutputStream中编写文件时,文件无法自动创建,因此您可以尝试这样做:
try {
pictureFile.createNewFile();
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(datas);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
编辑也是一个不相关的注释,你正在使用的随机实现将始终返回相同的数字,因为种子值是相同的。请尝试使用System.getCurrentMillis()代替图像的唯一名称。
答案 1 :(得分:0)
我遇到了与保存图像相同的问题,而且我们的代码类似。我不知道它是否重要,但我使用的是实际设备。对我有用的是在手机上运行项目,断开手机与电脑的连接,然后进行测试。经过测试,我可以将手机重新连接到我的电脑,看看是否有图像和文件夹。这对我来说很有用,可能对你有所帮助。