在活动中保持Android相机的开放性

时间:2014-10-03 18:00:45

标签: android camera google-glass android-windowmanager

我试图打开Android相机并让它在后台不断运行,以便为Glass和非Glass设备的各种长时间运行的框架消费者提供多种活动。这意味着我不能简单地在一个活动停止时关闭相机,并在下一个活动开始时重新打开它;它必须保持开放的整个时间。我尝试使用Application作为Context(而不是Activity)创建一个SurfaceView,并将其直接添加到WindowManager中。这确实让我保持相机打开,但是只有当我将它添加为系统覆盖时,它才会在实际活动之上呈现并使它们无法使用。我试过的其他东西都不起作用:

  • 使用活动生命周期回调查找活动,并将其内容视图显示在前面(系统覆盖覆盖所有内容)
  • 调用SetWillNotDraw(false)并覆盖自定义SurfaceView的OnDraw()以实际不呈现任何内容
  • 调用SetWillNotDraw(false)并覆盖自定义SurfaceView的OnDraw()以呈现覆盖屏幕的黑色矩形,包括不透明和透明
  • 打开相机后仍然将预览尺寸设置为(1,1)(仍呈现为全屏)
  • 使用我的初始Activity作为Context创建SurfaceView,并将其作为具有无触摸标记的应用程序类型添加到WindowManager(即使在向后推送并消耗输入后仍然呈现在顶部)
  • WindowManager.LayoutParams中的位置设置为离屏(仍在屏幕上呈现)

我的想法已经不多了,我不确定我想要的是什么。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

使用服务处理任何特定活动的上下文之外的预览框架。为了避免隐藏SurfaceView的问题,请使用SurfaceTexture,而不要将其连接到任何东西。

有关此方法的示例,请参阅https://github.com/Affectiva/android-sdk-samples/tree/master/ServiceFrameDetectorDemo