0

背景:

我有一个谷歌眼镜,我正在考虑一个应用程序,它可以抓取用户使用本机相机拍摄的任何/所有图像,并将这些图像传递给在线服务(例如 Twitter 或 Google+)。有点像生活博客风格的应用程序。

在我的第一个原型中,我实现了一个FileObserver服务,它监视 glass 存储其相机预览缩略图的目录 ( sdcard/google_cached_files/ ) 中的新文件。预览文件总是以 t_ 开头,所以一旦我在那里看到一个新文件,我就把它上传到我的 web 服务。这工作得很好,但是在 Glass XE11 中,这个缓存文件被移到了我无法触及的地方(/data/private-cache)。

所以现在,我正在查看文件夹sdcard/DCIM/Camera/以获取新的 .jpg 文件。这工作正常,但相机将全尺寸图像存储在那里,所以我必须等待 5-8 秒才能上传图像。

问题:

是否可以在可以拦截相机事件的玻璃上运行后台服务,并将缩略图或完整图像作为字节数组从 Bundle 中获取,这样我就不必等待它在访问之前写入磁盘它?

我一直在阅读有关 android 开发的更多信息,我怀疑答案涉及在我的服务中实现 BroadcastReciever,但我想在走错路之前咨询专家。

提前谢谢了

里奇

4

1 回答 1

1

是的。实现一个 PreviewCallback。它适用于手机的方式相同,例如:http ://www.dynamsoft.com/blog/webcam/how-to-implement-a-simple-barcode-scan-application-on-android/

我在谷歌眼镜上测试过,它可以工作。在这篇文章(http://datawillconfess.blogspot.com.es/2013/11/google-glass-gdk.html)中,我列出了相机在执行后返回的参数(在视频下方):

     Camera m_camera = Camera.open(0);
     m_params = m_camera.getParameters();
     m_params.setPreviewFormat(ImageFormat.NV21);
     m_camera.setParameters(m_params);

     m_params = m_camera.getParameters();
     m_params.setPreviewSize(320,240);

     m_params.set("focus-mode",(String)"infinity");
     m_params.set("autofocus", "false");

     m_params.set("whitebalance",(String)"daylight");
     m_params.set("auto-whitebalance-lock",(String)"true");

     m_camera.setParameters(m_params);

     String s = m_params.flatten();
     Log.i("CAMERA PARAMETERS", "="+s);
于 2013-11-24T03:43:30.730 回答