android - 从 Android Activity 中拍照 "as a Service"

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

我想从非 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/

相关文章:

java - Android/java 将子方法附加到父方法

android - Android Intent 对其 URI 做了什么?

java - 将通知点击数据发送到子 Activity

java - 为什么 Image 可以返回到之前的 Activity,但不能返回到新的 Activity

java - MBTiles 文件有大小限制吗?

android - 我们如何从 android 中以 smack 或 xmpp 获取发件人的消息已读/已见确认

c# - 在 Windows 上安装 Xamarin Studio

android - getIntent().getExtras() 有时会在 Activity 中崩溃

android - 如何检查设备是否有前置和后置摄像头?

android - 获取android相机设备的视角