媒体投影每秒(或半秒)截屏

Media projection taking screenshots every second (or half a second)

查看this 媒体投影 拍摄屏幕截图 的示例,我注意到屏幕截图不正常。例如,对于连续的每个屏幕截图,它花费了这么多毫秒:

174
155
149
1000
998
2014
415
1606
2859
...

我的问题是:我可以强制 onImageAvailable 每隔一段时间截取一次屏幕截图吗?我需要使用媒体投影,因为我会在我的应用程序之外截屏。

这是不规则的,因为只有在有新帧可用时才会截取屏幕截图(屏幕上的某些内容发生了变化)。据我所知,使用 Media Projection 无法定期截取屏幕截图。

要限制截取屏幕截图的频率,请在处理图像后使用Thread.sleep

但是,您需要执行某种触发器,以便在执行 reader.acquireLatestImage() 时始终有可用的图像。像换屏这样的东西会触发一个新的框架,但是还有其他一些东西可以在不改变屏幕的情况下触发一个新的框架,比如按下主页按钮或者创建一个不可见的吐司通知(可能还有更多但我找不到任何现在)。您可以通过将 phone 充电至 100%、使其处于飞行模式、关闭所有其他程序并写入 Logcat.

来测试它们
Toast toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT);
toast.getView().setBackgroundColor(Color.TRANSPARENT);
toast.show();
image = reader.acquireLatestImage();

由于无法更改 Toast 通知的持续时间,以上代码仅在使用 1000 毫秒或更长的间隔时才能正常工作。