我尝试使用Glass Camera显示捕获的图像并将其显示在ImageView中。
这就是我现在所做的:
public void startCamera()
{
Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(captureIntent, 100);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK && null != data)
{
String photoPath = data.getExtras().getString("picture_file_path");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
bitmap = BitmapFactory.decodeFile(photoPath, options);
mImageView.setImageBitmap(bitmap);
}
}
但是位图为空。当我记录photoPath时,它给我一个文件路径,如:
/mnt/sdcard/DCIM/Camera/20131216_195521_665.jpg
有什么想法吗?
答案 0 :(得分:2)
由于拍摄照片后在Glass上进行处理,因此在调用onActivityResult
时可能无法完整写入文件。
您应该使用CameraManager
javadoc中所述的FileObserver
来推迟处理,直到文件准备就绪。为此,让FileObserver
观察文件本身上CLOSE_WRITE
事件的给定路径的父目录。我们camera developer guide中的页面底部提供了一个示例。
答案 1 :(得分:1)
正如Tony Allevato所说,问题是您的程序没有等待足够长的文件出现。当我在XE11上试验这个时,文件系统中的文件通常需要5-10秒才能读取。由于某些原因,FileObserver也不适用于我,所以我实现了一个计时器,然后我编写了自己的活动。
我们听说GDK的下一个版本将提供快照,因此您的问题可能会消失,因为您可以使用它。与此同时,您可能需要考虑编写自己的活动来拍照,就像我在这里所做的那样: