我想从非 Activity 线程(设备上运行的 Web 服务器)拍照。
为了做到这一点,我想要将一个服务绑定(bind)到应用程序,我可以调用它来拍照,并在完成后返回位图。但看起来我不能这样做,因为出于安全目的,Android 禁止在不显示预览的情况下拍照(即使在某些设备上有虚拟预览 like shown on the accepted answer here )
然后我想要一个 Activity 为我拍照并进行真实预览,但我也想不出任何方法来做到这一点,因为:
我无法取回位图,因为我无法调用
startActivityForResult()
,因为我的网络服务器不是 Activity,所以我无法覆盖onActivityResult( )
。 (WebServer 仅具有应用程序实例的引用)我不能只传递 HttpRequest 和 Activity 的 Intent 来响应它,因为 Response 对象不可分割?
你会如何以最合乎逻辑/最优雅的方式做这样的事情?
最佳答案
我真诚希望这仅供个人使用,并且您没有认真考虑在许多移动设备上放置 Web 服务器(具有开放的、不 protected 服务器套接字)。如果您是,我希望您有充足的法律辩护基金。
话虽这么说:
第 1 步:让您的 Web 守护程序服务向 LocalBroadcastManager
注册 BroadcastReceiver
第 2 步:根据需要,让您的服务调用 startActivity()
来启动您的拍照 Activity
第 3 步:让您的拍照 Activity 通过 LocalBroadcastManager
为您的 Web 守护程序服务发送广播,其中 JPEG 数据可以在 Intent
extra 中,也可以如果您确定能够在拍摄下一张图像之前处理它,则将其作为静态数据成员。
使用 LocalBroadcastManager
可以避免将 Intent
(及其巨大的额外位图)传送到操作系统并再次返回到您的进程。
关于android - 从 Android Activity 中拍照 "as a Service",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971027/