我有一个谷歌眼镜,我正在考虑一个应用程序,可以使用本机相机抓取用户拍摄的任何/所有图像,并将这些图像传递到在线服务(例如Twitter或Google+)。有点像生活博客风格的应用程序。
在我的第一个原型中,我实现了一个 FileObserver 服务,该服务监视玻璃存储其相机预览缩略图的目录中的新文件( sdcard / google_cached_files / )。预览文件总是以t_开头,所以当我在那里看到一个新文件时,我将它上传到我的webservice。这工作得非常好,但是在Glass XE11中,这个缓存文件被移出了我的范围(/ data / private-cache)。
现在,我正在观看新的.jpg文件的文件夹 sdcard / DCIM / Camera / 。这样工作正常,但相机正在那里存储完整尺寸的图像,因此我必须等待5-8秒才能上传图像。
是否可以在可以拦截相机事件的玻璃上运行后台服务,并从Bundle中获取缩略图或完整图像作为字节数组,这样我就没有了在访问之前等待它写入磁盘?
我一直在阅读有关Android开发的更多信息,我怀疑答案涉及在我的服务中实现BroadcastReciever,但我想在走错路之前先咨询专家。
非常感谢提前
里奇
答案 0 :(得分:1)
是。实现PreviewCallback。它适用于手机的方式,例如:http://www.dynamsoft.com/blog/webcam/how-to-implement-a-simple-barcode-scan-application-on-android/
我在Google Glass上进行了测试,但它确实有效。在这篇文章(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);