从Android活动“作为服务”拍照

时间:2012-06-10 18:02:41

标签: android android-intent android-camera android-activity android-service

我想从非活动线程(在设备上运行的网络服务器)拍照。

为了做到这一点,我想要一个服务绑定到应用程序,我可以调用哪个会拍照,并在完成后返回Bitmap。但看起来我不能这样做是因为出于安全考虑,Android禁止拍摄照片而不显示预览(即使在某些设备上使用虚拟预览like shown on the accepted answer here

然后我希望有一个活动为我拍照,有一个真实的预览,但我想不出任何方法这样做是因为:

  • 我无法恢复Bitmap,因为我无法调用startActivityForResult(),因为我的网络服务器不是Activity,因此我无法覆盖onActivityResult()。 (webServer只有应用程序实例的引用)

  • 我不能只是将HttpRequest和Intent一起传递给Activity来响应它,因为Response对象不是parcellable?

你会如何以最符合逻辑/优雅的方式做同样的事情?

1 个答案:

答案 0 :(得分:2)

真诚地希望这仅供个人使用,并且您并没有认真考虑将Web服务器 - 带有开放,不受保护的服务器套接字 - 放在许多移动设备上。如果你是,我希望你有一个资金充足的法律辩护基金。

话虽如此:

步骤1:让您的Web守护程序服务注册BroadcastReceiver LocalBroadcastManager

步骤2:根据需要,让您的服务电话startActivity()进行拍照活动

步骤3:让您的拍照活动通过LocalBroadcastManager为您的网络守护程序服务发送广播,其中JPEG数据可以是Intent额外的,也可以只是作为静态数据成员如果您确定在拍摄下一张图像之前能够处理它。

使用LocalBroadcastManager可以避免将Intent(及其巨大的位图额外)发送到操作系统并再次返回到您的流程。