从“作为服务”的 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 守护程序服务注册 BroadcastReceiverLocalBroadcastManager

第 2 步:根据需要,拨打服务电话startActivity() 以调出您的拍照活动

第 3 步:让您的拍照活动通过 LocalBroadcastManager 为您的 Web 守护程序服务发送一个广播,其中 JPEG 数据或者在 Intent 额外中,或者可能只是作为静态数据成员,如果您是确保您能够在拍摄下一张图像之前对其进行处理。

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

【讨论】:

谢谢!仅供参考,这仅用于演示目的,永远不会运送到生产设备。

以上是关于从“作为服务”的 Android Activity 中拍照的主要内容,如果未能解决你的问题,请参考以下文章

Android从activity2访问activity1

android开发 如何从一个activity中的两个按钮分别跳转到另外两个activity?

从 Activity 向服务发送消息 - Android

Android从Fragment跳转到Activity

Android - 将数据从 AsyncTask 传递到 Activity

如何从android中的非Activity类调用服务方法