我在运行相机的片段中有一个表面视图。我可以用它开始/停止/拍照,但我永远无法成功检索图像。
jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// Create an image file name
File image = null;
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
try {
image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
} catch (IOException e) {
e.printStackTrace();
}
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
Log.d("Files", "Path: " + path);
File f = new File(path);
File file[] = f.listFiles();
Log.d("Files", "Size: "+ file.length);
for (int i=0; i < file.length; i++)
{
Log.d("Files", "FileName "+i+" :" + file[i].getName());
}
Bitmap myBitmap = BitmapFactory.decodeFile(file[0].getAbsolutePath());
ImageView taken_pic = (ImageView) view.findViewById(R.id.taken_pic);
taken_pic.setImageBitmap(myBitmap);
}
};
日志看起来像这样。即使在我重新启动应用程序进行更改之后,图像也堆积起来,所以我认为它们正在保存(不是我能看到它们,除非我做这样的事情)。
我还没有包含任何XML,因为问题是检索图像而不是显示图像。我该怎么做才能正确检索这些图像。还有一种方法/可靠程序可以从PC资源管理器或其他东西查看这些图像吗?非常感谢。
Path: /storage/emulated/0/Pictures
D/Files﹕ Size: 8
D/Files﹕ FileName 0 :cache
D/Files﹕ FileName 1 :Screenshots
D/Files﹕ FileName 2 :JPEG_20140713_121953_-1379701757.jpg
D/Files﹕ FileName 3 :JPEG_20140713_122054_-1379701757.jpg
D/Files﹕ FileName 4 :JPEG_20140713_123411_-1379701757.jpg
D/Files﹕ FileName 5 :JPEG_20140713_123722_-1379701757.jpg
D/Files﹕ FileName 6 :JPEG_20140713_123833_-1379701757.jpg
D/Files﹕ FileName 7 :JPEG_20140713_124125_-1379701757.jpg
E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/cache: open failed: EISDIR (Is a directory)
答案 0 :(得分:0)
Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/cache: open failed: EISDIR (Is a directory)
看起来你传递的是目录名,而不是文件名。从输出中可以看出,列表中的第一个文件称为“缓存”;如果你看一下磁盘,你可能会发现它是一个目录。
您应该仅限于名称以“.jpg”结尾的文件。执行此操作的一种方法是this code,它使用简单的正则表达式使用File.list(FilenameFilter)将glob模式应用于检索到的文件列表。所以你打电话给MiscUtils.getFiles(path, "*.jpg")
。
当然,如果有一个名为“foo.jpg”的目录,它也会找到它。您可以使用File.isFile()进行测试来消除这些问题。