从Android活动中拍摄一张照片”;“作为一种服务”;

从Android活动中拍摄一张照片”;“作为一种服务”;,android,android-intent,android-camera,android-activity,android-service,Android,Android Intent,Android Camera,Android Activity,Android Service,我想从非活动线程(设备上运行的web服务器)拍摄照片 为了做到这一点,我希望有一个服务绑定到应用程序,我可以调用它来拍照,并在完成后返回位图。但看起来我不能这么做,因为出于安全考虑,Android禁止在不显示预览的情况下拍照(即使在某些设备上有虚拟预览) 然后,我想让一个活动为我拍照,并进行真正的预览,但我也想不出任何方法来实现这一点,因为: 我无法取回位图,因为我无法调用startActivityForResult(),因为我的web服务器不是活动,所以我无法覆盖onActivityResu

我想从非活动线程(设备上运行的web服务器)拍摄照片

为了做到这一点,我希望有一个服务绑定到应用程序,我可以调用它来拍照,并在完成后返回位图。但看起来我不能这么做,因为出于安全考虑,Android禁止在不显示预览的情况下拍照(即使在某些设备上有虚拟预览)

然后,我想让一个活动为我拍照,并进行真正的预览,但我也想不出任何方法来实现这一点,因为:

  • 我无法取回位图,因为我无法调用
    startActivityForResult()
    ,因为我的web服务器不是活动,所以我无法覆盖
    onActivityResult()
    。(Web服务器只有应用程序实例的引用)

  • 我不能只传递HttpRequest和活动响应它的意图,因为响应对象是不可打包的

您将如何以最合乎逻辑/最优雅的方式进行类似的操作?

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

也就是说:

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

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

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


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

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