从“作为服务”的 Android Activity 中拍照
Posted
技术标签:
【中文标题】从“作为服务”的 Android Activity 中拍照【英文标题】:Take a picture from an Android Activity "as a Service" 【发布时间】:2012-06-13 19:44:06 【问题描述】:我想从非活动线程(设备上运行的网络服务器)中拍照。
为了做到这一点,我希望有一个绑定到应用程序的服务,我可以调用它来拍照,并在完成后返回位图。但看起来我不能这样做,因为出于安全考虑,android 禁止在不显示预览的情况下拍照(即使在某些设备上使用虚拟预览 like shown on the accepted answer here)
然后我想有一个 Activity 为我拍照,并提供真实预览,但我也想不出任何方法,因为:
我无法取回位图,因为我无法调用 startActivityForResult()
,因为我的 Web 服务器不是 Activity,因此我无法覆盖 onActivityResult()
。 (webServer 只是引用了 Application 的实例)
我不能只传递 HttpRequest 和 Intent 让 Activity 响应它,因为 Response 对象不可分割?
你会如何以最合乎逻辑/最优雅的方式做这样的事情?
【问题讨论】:
【参考方案1】:我真诚地希望这仅供个人使用,并且您不会认真考虑在许多移动设备上放置一个带有开放、未受保护的服务器套接字的 Web 服务器。如果你是,我希望你有一个资金充足的法律辩护基金。
话虽如此:
第 1 步:让您的 Web 守护程序服务注册 BroadcastReceiver
和 LocalBroadcastManager
第 2 步:根据需要,拨打服务电话startActivity()
以调出您的拍照活动
第 3 步:让您的拍照活动通过 LocalBroadcastManager
为您的 Web 守护程序服务发送一个广播,其中 JPEG 数据或者在 Intent
额外中,或者可能只是作为静态数据成员,如果您是确保您能够在拍摄下一张图像之前对其进行处理。
使用LocalBroadcastManager
可以避免将Intent
(及其巨大的额外位图)发送到操作系统并再次返回到您的进程。
【讨论】:
谢谢!仅供参考,这仅用于演示目的,永远不会运送到生产设备。以上是关于从“作为服务”的 Android Activity 中拍照的主要内容,如果未能解决你的问题,请参考以下文章
android开发 如何从一个activity中的两个按钮分别跳转到另外两个activity?