【问题标题】:Listen to photo taken event收听拍照事件
【发布时间】:2011-09-01 19:28:51
【问题描述】:

只想注册视频/照片拍摄活动。

希望,但不是必须的,当操作完成时会触发事件,所以我不会处理半张照片或半拍的视频。

已经试过了:

fileObserver = new FileObserver(dcimDir, FileObserver.ALL_EVENTS)

我在使用文件管理器应用程序遍历时看到事件,但在拍照或复制时看不到。

想法?

【问题讨论】:

  • 也许我需要监听(注册)dcim 文件夹中的每个文件夹,因为文件事件仅触发直接父级而不是某些祖父级 - 尽管在文档中他们说监听器是递归。
  • 另一种选择可能是使用一些 DB 监听器。有人熟悉吗?
  • 可能重复? stackoverflow.com/questions/4571461/… 虽然这个答案可能不是最好的解决方案。
  • 史蒂文,这是一个完全不同的问题,可能有类似的解决方案。我正在询问他正在考虑为什么广播接收器不工作的聆听技巧。

标签: android filesystems photo


【解决方案1】:

通过注册到dcim的所有子目录(以句点开头的除外)找到了一种方式:

new FileObserver(dcimDir.toString(), FileObserver.CLOSE_WRITE)

我需要全部注册的原因是因为不同的手机将图片和视频放在不同的文件夹中-至少它们都在DCIM下。

事件是'CLOSE_WRITE'的原因是因为我想在照片/视频完成后触发,所以我不会只处理一半的照片/视频。

【讨论】:

  • 这个应用程序的主要缺点是它需要监听的应用程序始终保持运行,因此如果系统杀死它就无法工作。
  • 不是真的。如果您将观察者注册为粘性启动的服务(Service.START_STICKY),或者即使您将其设置为前台服务(使用 Service.startForeground()),系统也不会杀死它,如果是这样,它会尽快重新启动它.
【解决方案2】:

还有一种方法: ContentProvider

查看另一个 SE 线程了解更多信息:Android -- How does Google+ instant upload work?

【讨论】:

  • 这个应用程序的主要缺点是它需要监听的应用程序始终保持运行,因此如果系统杀死它就无法工作。
  • 不是真的。如果您将观察者注册为粘性启动的服务(Service.START_STICKY),或者即使您将其设置为前台服务(使用 Service.startForeground()),系统也不会杀死它,如果是这样,它会尽快重新启动它.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 2021-12-25
  • 2014-02-05
  • 2012-01-12
  • 2013-05-06
相关资源
最近更新 更多