如this answer中所述,我正在通过此调用镜像我的应用程序的logcat输出:
Runtime.getRuntime().exec("logcat -f " + absolutePathToLogFile);
这将产生一个logcat进程,该进程将日志条目实时复制到我指定的文件中。该过程永远不会自行退出,但会在应用程序退出或被终止时终止。
为了使生成的文件通过MTP可见(无需重新启动),我需要对其进行媒体扫描。
如果在生成logcat进程后立即触发媒体扫描,则会显示该文件,但是MTP客户端只会看到扫描发生时的内容。通过MTP访问文件时,以后添加的所有内容都将丢失,尽管通过adb
访问文件时可见。
因此,在将最后一个事件写入文件后,即在logcat进程被杀死之后,我需要 运行媒体扫描。据我了解,我无法在我的应用程序中执行此操作,因为Android会在没有警告的情况下终止应用程序进程,并且不会给应用程序提供响应的机会。也就是说,当我的应用即将被杀死时,我无法触发媒体扫描,因为不会通知应用即将发生这种情况。我也无法对logcat进程的终止做出反应,因为那时我的应用程序将不再有效。
(我确实意识到,在此之前,我可能还需要扫描文件,例如,如果我想在文件仍被写入时访问文件,但这是另一回事了。)
我知道可以通过诸如这样的shell命令来触发媒体扫描
am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///path/to/file
但是不知道在logcat进程退出后如何运行它。
在logcat进程结束后,有什么方法可以告诉系统对文件运行媒体扫描吗?