看一下这个媒体投影截屏的例子,我注意到截屏是不规则的。例如,对于连续的每个屏幕截图,它需要这么多毫秒:
174
155
149
1000
998
2014
415
1606
2859
...
我的问题是:我可以强制onImageAvailable每隔一定时间截取一次屏幕截图吗?我需要使用媒体投影,因为我将在我的应用程序之外进行截图。
看一下这个媒体投影截屏的例子,我注意到截屏是不规则的。例如,对于连续的每个屏幕截图,它需要这么多毫秒:
174
155
149
1000
998
2014
415
1606
2859
...
我的问题是:我可以强制onImageAvailable每隔一定时间截取一次屏幕截图吗?我需要使用媒体投影,因为我将在我的应用程序之外进行截图。
这是不规则的,因为只有在有新框架可用时才会截取屏幕截图(屏幕上的某些内容发生了变化)。据我所知,不可能使用 Media Projection 定期截取屏幕截图。
要限制截屏的频率,Thread.sleep
请在处理图像后使用。
但是,您需要执行某种触发器,以便在reader.acquireLatestImage()
执行时始终有可用的图像。像换屏之类的东西会触发一个新的框架,但是还有其他的东西可以在不改变屏幕的情况下触发一个新的框架,例如按下主页按钮或创建一个不可见的 toast 通知(可能还有更多,但我找不到任何马上)。您可以通过将手机充电至 100%、使其处于飞行模式、关闭所有其他程序并写入 Logcat 来测试它们。
Toast toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT);
toast.getView().setBackgroundColor(Color.TRANSPARENT);
toast.show();
image = reader.acquireLatestImage();
由于 Toast 通知无法更改其持续时间,因此上述代码仅在使用 1000 毫秒或更长时间的间隔时才能正常工作。